js在对类型检测时大概有五种方法:
1、typeof
2、instanceof
3、obj.prototype.toString
4、constructor
5、duck type
第一种 typeof :
typeof 100 "number"
typeof true "boolean"
typeof function "function"
typeof (undefined) "undefined"
typeof new object() "object"
typeof [1,2] "object"
typeof NaN "number"
typeof null "object"(特别记忆)
第二种 instanceof :
instanceof 一般喜欢使用在原型链里 obj instanceof Object 返回值为 false或者true
function person(){ }
function student(){ }
student.prototype=new person()
var bosn=new student()
bosn instanceof student (输出为true)
bosn instanceof person (输出为true)
var one = nes person()
one instanceof person (输出为true)
one instanceof student (输出为false)
第三种 Object.prototype.toString
Object.prototype.toString.apply([1,2]) //"[object Array]" Object.prototype.toString.apply('str') //"[object String]" Object.prototype.toString.apply(1) //"[object Number]" Object.prototype.toString.apply(null) //"[object Null]" Object.prototype.toString.apply() //"[object Undefined]" Object.prototype.toString.apply(function(){}) //"[object Function]" Object.prototype.toString.apply(true) //"[object Boolean]" Object.prototype.toString.apply(new Object()) //"[object Object]"
前三种较为常用
第四种 constructor
因为constructor可以改变,所以使用时要小心
第五种 duck type
鸭子类型