先上代码:
var a = 10;
alert(a instanceof Number);//false 这里为什么是false?
alert(a instanceof String);//false
alert(a instanceof Object);//false 这里为什么是false?
alert(typeof a == ‘number‘);//true
var a = [‘1‘,‘a‘];
alert(a instanceof Array);//true
alert(a instanceof Object);//true
alert(typeof a == ‘object‘);//true
var a = ‘a‘;
alert(a instanceof String);//false 这里为什么是false?
alert(a instanceof Object);//false 这里为什么是false?
alert(typeof a == ‘string‘);//true
我想不通的是: 为什么是false?我有百度过答案,得到的答案是
instanceof 用于判断是否是某个对象的实例;typeof 用于判断数据类型。但这个答案不足以说明问题,故上来请教,请教教我,谢谢!
==========================华丽分割线==========================================
自问自答下:
一个具体的数字,10,它可以认为是number类型,也可以认为是对象类型中Number的一个实例,但是这样就犯了种类划分冲突的问题了,它即是
number类型,又是Object类型(其子类Number类型),因此,instanceof要排除已经定义的数据类型中规定的类型,也就是只适用于
自定义类型。
另外,对于数组只有类Array的概念,没有数组数据类型,typeof只能返回object数据类型,因此,对于数组是可以用instanceof的。
综上:没有必要过于纠结javascript的语法,因为它本身是一种弱的类型变量语言,确实不够严谨。