温故而知新-1

1. JavaScript的typeof返回哪些数据类型?

  • object
  • number
  • string
  • boolean
  • function

2. 检查数组的几种方式:

  • Array.isArray(); // es5
  • toString.call([]); // [Object Array]
  • var arr = []; arr.constructor === Array;
  • var arr = []; arr instanceof Array;

3. 传统事件绑定和符合W3C标准的事件绑定有什么区别?

1
2
div1.onclick = function(){};
<button onmouseover=""></button>

传统时间绑定

  1. 如果给同一个元素绑定了多次相同类型的事件,那么后面的绑定会覆盖前面的绑定
  2. 不支持DOM事件流
    时间捕获阶段=>目标元素解读=>时间冒泡阶段

符合W3C标准的事件绑定方式

addEventListener
attachEvent

A.非IE浏览器:

  • addEventListener
    1. 如果给同一个元素绑定了多次相同类型的事件,所有答绑定将会一次触发
    2. 支持DOM事件流
    3. 进行事件绑定传参不需要on前缀
1
2
addEventListener('click', function(){}, true);
// 此时的事件在捕获阶段执行,第三个参数:是否在捕获阶段执行,默认false(在冒泡阶段执行)

B.IE浏览器

  • ie9开始,ie11, edge: addEventListener
  • ie9以前:attachEvent/detachEvent
    1. 进行事件类型传参需要带上on前缀
    2. 进行这种方式只支持事件冒泡,不支持事件捕获

4.IE和标准下有哪些兼容性的写法

1
2
3
4
ev = ev || window.event // 获取触发事件答对象
var target = ev.srcElement || ev.target // 获取事件答源对象

document.documentElement.clientWidth || document.body.clientWidth

5. call和apply的区别

  • 相同点
    都是为了让一个对象执行本不属于它的方法

    1
    2
    3
    4
    5
    toString.call([], 1, 2, 3)
    toString.apply([], [1, 2, 3])

    Object.call(this, obj1, obj2, obj3)
    Object.apply([], arguments)
  • 不同点

    • call 第二个参数开始接受一个参数列表
    • apply 第二个参数开始接受一个参数数组