先上代码:
    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的语法,因为它本身是一种弱的类型变量语言,确实不够严谨。