JS中的typeof和instanceof常用来判断一个变量是否为空,或者是什么类型。
typeof
typeof运算符返回一个用来表示表达式的数据类型的字符串。
typeof一般返回以下几个字符串:
"number", "string","boolean","object","function","undefined"
对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。
我们可以使用typeof来判断一个变量是否存在,if(typeof a!= "undefined"), 而不要去使用if(a),因为a不存在(未声明)会报错。
instanceof
instanceof用来检测某个对象是不是另一个对象的实例。
官方的话:该运算发用来测试一个对象在其原型链中是否存在一个构造函数prototype属性
var a = new Array();console.log(a instanceof Array); // 会返回 trueconsole.log(a instanceof Object); // 也会返回 true 因为Array是object 的子类
function Foo(){}Foo.prototype = new Aoo(); // 原型继承var foo = new Foo();console.log(foo instanceof Foo) //trueconsole.log(foo instanceof Aoo) //trueinstanceof不仅可以判断一层继承关系,也可以判断多层继承关系
var a = new Array();if(a instanceof Object) // 返回trueif(window instanceof Object) // 返回falsetypeof(window) //会得到object需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false
var a = new Array();if(a instanceof Object) // 返回trueif(window instanceof Object) // 返回falsetypeof(window) //会得到object需要注意的是,如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false