js基础
js有5种原始类型,一个对象类型:
5种原始类型:null undefined number string boolean
1种对象类型:object(Function,Date,Array,Number,Boolean,String)
==和===区别:
===,类型不同直接返回false
==,有隐试转换,比如:
'2'==2,true, 字符串转换为数字
true==1,true,布尔类型转换为数字
new String('1')==1,true,对象转换为其他基本类型
typeof适合基本类型及function检测,遇到null失败:
typeof null 结果: "object"
typeof NaN 结果:"number"
typeof Function 结果:"function"
typeof true 结果:"boolean"
typeof 1 结果:"number"
typeof '1' 结果:"string"
typeof [1,2] 结果:"object"
typeof new Object() 结果:"object"
typeof undefined 结果:"undefined"
instanceof适合自定义对象,也可以检测原生对象,在不同iframe和window间检测失效:
obj instanceof Object,要求左边必须是一个对象,右边必须是个函数对象或者函数构造器,否则报错。
instanceof 原理:左边的对象的原型链上是否有右边构造函数的prototype属性
Object.prototype.toString,通过{}.toString拿到,适合内置对象和基本类型,遇到null,undefined失效。
Object.prototype.toString.apply([]) 结果:"[object Array]"
Object.prototype.toString.apply(undefined) 结果:"[object Undefined]",ie6/7/8 返回 "[object Object]"
Object.prototype.toString.apply(null) 结果:"[object Null]",ie6/7/8 返回 "[object Object]"
原生事件:
DOM事件:click mouseover mousedown focus blur load....
BOM事件:resize beforeunload storage orientationchange....
自定义事件:
本质:观察者模式
优点:跳出原生事件的限制,提高封装的抽象层级