js要点

2021-02-03  本文已影响0人  双鱼九年

1.标准盒模型、IE盒模型区别

标准盒子模型:元素的width或height=content的width或height;

IE盒子模型:元素的width或height=content的width或height+padding*2+border*2;

即元素的content包不包含内边距与边框的差别

2.清除浮动的四种常用方法:

注:clear:both:本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来

(1)添加标签法:在最后一个浮动标签后,新加一个标签,给其设置clear:both

优点:通俗易懂,方便

缺点:添加无意义标签,语义化差

(2)父级添加overflow属性(父元素添加overflow:hidden)

优点:代码简洁

缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素

(3)使用after伪元素清除浮动

优点:符合闭合浮动思想,结构语义化正确

缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.

(4)使用before和after双伪元素清除浮动

优点:代码更简洁

缺点:用zoom:1触发hasLayout.

3.例举3种强制类型转换和2种隐式类型转换

强制(parseInt,parseFloat,number)

隐式(== ===)

4.怎样理解闭包?常见的闭包有哪些?优缺点

闭包就是能够读取其他函数内部变量的函数,使得函数不被GC回收;

作为函数返回值的闭包、作为for循环闭包、作为参数的闭包;

好处

①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突

②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)

③匿名自执行函数可以减少内存消耗

坏处

①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;

②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

5.js的数据类型

基本类型:

1、undefined 类型表示不存在定义,声明变量但没有初始化,这个变量的值就是undefined; 注意:在任何一个引用变量值设置为undefined都是错误的

2、null 类型,表示一个值被定义了,定义为空值; 使用场景为 定义变量准备在将来用于保存对象;所以引用值可以是null而不会是undefined;

undefined和null的区别:js诞生的时候只设置了null作为“无”的值。最初的设计是null是表示一个“无”的对象,转为数值时为0; | undefined表示“无”的原始值,转为数值时为NaN;红宝书上说引入undefined就是为了正式的区分空对象指针与未经初始化的变量,变量设置为null就是空对象指针,没有设置就是未经初始化!

3、Boolean类型,字面值为true和false

4、number类型,字面量格式可以是十进制、八进制(八进制第一位必须是0)、十六进制(前两位必须是0x)

5、String类型 由零个或多个16位Unicode字符组成的字符序列

6、symbol类型,ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6 引入Symbol的原因 

引用类型:

引用类型统称为object类型,细分的话有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等。

两种类型在添加属性时候的区别

1、引用类型可以动态的给添加属性,

2、但是基本类型的值是不可变也不可以复制的 

6.冒泡事件怎么理解?关闭冒泡的方法

点击内层元素,外层元素也会触发点击事件。

阻止冒泡ev.cancelBubble = true;非IE ev.stopPropagation();

7.数据类型的判断

这里只举一个例子,两种方法的使用

var arr = [];

arr instanceof Array; //true

typeof arr;//Object,typeof无法判断数组类型

8.js原型链的理解:

这个我就不写了,不懂的看这篇文:https://www.jianshu.com/p/be7c95714586

9.关于数据的一些常用函数方法

sort(sortby):排序函数,sortby,可选,必须为函数,用来规定排序顺序。ps:sort返回的是原数组,并不会生成新数组

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

若 a 等于 b,则返回 0。

若 a 大于 b,则返回一个大于 0 的值。

map(function(currentValue, index, arr),thisValue):遍历数组函数,返回一个新的数组,数组中的元素为原始数组调用函数处理后的值

ps:map()不会对空数组进行检测;map()不会改变原始数组;

参数说明:

function(currentValue, index, arr):必须。为一个函数,数组中的每个元素都会执行这个函数。其中函数参数:

currentValue:必须。当前元素的的值。

index:可选。当前元素的索引。

arr:可选。当前元素属于的数组对象。

thisValue:可选。对象作为该执行回调时使用,传递给函数,用作"this"的值

forEach(function(currentValue, index, arr),thisValue):区别于map,它没有返回值

push()尾部添加 pop()尾部删除 unshift()头部添加 shift()头部删除concat数组合并,不会改变原数组

待更新...

上一篇 下一篇

猜你喜欢

热点阅读