1. js中数据类型
5种基础数据类型undefined , Null , Boolean , Number , String
1种复杂数据类型Object
2. typeof 返回哪些数据类型
string,boolean,number,undefined,function,object
typeof(null) object
typeof() 最后的返回值是一个字符串
3. null和undefined区别
相同点:
- 在 if 语句中 null 和 undefined 都会转为false
- 两者用 "=" 比较也是相等
不同点:
- null表示没有对象或者说空对象,即该处不应该有值
- 作为函数的参数,表示该函数的参数不是对象
- 作为对象原型链的终点
- null转化为number数据类型是0
- undefined表示缺少值,即此处应该有值,但没有定义
- 定义了形参,没有传实参,显示undefined
- 对象属性名不存在时,显示undefined
- 函数没有写返回值,即没有写return,拿到的是undefined
- 写了return,但没有赋值,拿到的是undefined
- null转化为number数据类型是NaN
4. 事件流模型 事件委托 事件监听 阻止冒泡
事件冒泡 从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
事件捕获 从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。
结合前面二者原理可以做到事件委托。
事件委托是指 通过监听一个父元素,来给不同的子元素绑定事件,减少监听次数,从而提升速度。
addEventListener('click',func,boolean); //默认为false即事件冒泡 true为事件捕获。
//阻止冒泡的代码:
window.event.cancelBubble = true;//ie
event.stopPropagation();//非ie
5.call apply bind三者用法及区别
三者都是用来改变函数的this对象的指向。并且前两者都会直接执行。
而bind不会,bind返回值是一个改变过this指向的函数。
func.call(obj,param1,param2,param3,...);
func.apply(obj,[param1,param2]);
func.bind(obj,param1,param2,param3,...);
apply还有一些巧妙用法。利用其可以解析数组为一个个参数的特性。 都是利用了Math.max() 括号内可以存在任意个参数的特性以及apply可以解析数组为参数。
//取出最大/最小值
var max=Math.max.apply(null,Array)
var min=Math.min.apply(null,Array)
//合并数组。
vararr1=new Array("1","2","3");
vararr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2);