首先说一下JS的六大基本数据类型:undefined null boolean number string object(Array也是对象)。
当然 ES6 标准又新添了一个类型:Symbols,这里不谈。
对于undefined boolean number string 这四种类型的判断,都可以使用 typeof 解决,如下
var a;
console.log(typeof a); //undefined
var a = true;
console.log(typeof a); //boolean
var a = 119;
console.log(typeof a); //number
var a = "Jams";
console.log(typeof a); //string
可以看到,使用 typeof 能够有效的判断出这四种数据类型
并且 typeof 还可以判断 function 函数类型,如自定义函数 或者 Date,eval 等已定义好的函数.
var a = function(){};
console.log(typeof a); //function
console.log(typeof Date); //function
console.log(typeof eval); //function
而对于null object 还有数组对象就无法精确判断,只能显示object
var a = null;
console.log(typeof(a)); //object
var a = document;
console.log(typeof a); //object
var a = ['string','number','NaN']
console.log(typeof a); //object
对于 null、document 我们可以使用 === 判断,既判断类型又判断内容
var a = null;
console.log(a === null);
var a = document;
console.log(a === document);
那我们应该如何去精确判断数组对象类型呢?
接下来就轮到 instanceof 登场了!
instanceof 语法:b instanceof A
instanceof 解释:判断 b 是否是 A 的实例或者 A 的子类的实例
var a = ['string','number','NaN']
console.log(a instanceof Array);
a 是 Array 的实例,故结果为 true.
再举个例子:
function Foo(){}
var f1 = new Foo();
console.log(f1 instanceof Foo);
console.log(f1 instanceof Object);
结果是 true true.
Object是所有对象的基类。
转载请注明出处。