一个javascipt问题。
发布于 2年前 作者 harryzd 761 次浏览

######如题,仅仅是javascript语法问题。我找了很多资料也没有理出头绪,包括[javascript 神秘花园](http://bonsaiden.github.com/JavaScript-Garden/zh/#object.general

废话不说,上代码

var a = {0:1,1:1,2:3,length:3};

上面创建了一个a对象。我想知道的是,a对象中,a[1]是什么类型?OK,做如下试验。

a[1] instanceof Number
   //false
typeof a 
    //return number

…那么a[1]到底是什么类型?难道不是数字吗?那么为什么

a[1]instanceof Number 

回返回false

9 回复

不是很清晰, 但 instanceof 还真不是按字面理解的, 比如这个:

a = {}
a.__proto__ = Number.prototype
a instanceof Number

问的问题不够清晰嘛?

(1) instanceof Number
// false

说明数值并不是Number类型

那为什么

typeof a[1] 
  //return number
console.log(typeof 1, 1 instanceof Number);//number false

var nu = new Number(1);
console.log(typeof nu, nu instanceof Number);//object true

原因:

object instanceof constructor

#具体分析见MDN enter link description here

@HarryZD

var nu = new Number(1);//一个新创建的 Number 对象
var myNum=Number(1);//自己的参数转换成一个原始的数值,等同于myNum=1

console.log(typeof nu, nu instanceof Number);//object true

console.log(typeof myNum, myNum instanceof Number);//number false

我大概明白了

instanceof  

的使用需要new出来一个对象,这个对象有constructor属性。constructor属性里是这个对象的类型名称。

a[1]

不是new出来的对象而是基本类型。没有constructor属性。但是

typeof a[1]

可以检测类型,并返回类型的名称。 感谢感谢

typeof a[1] ==> 'number'a[1] instanceof Number ==>false不矛盾,说明a[1]是primitive type而非object type 别太纠结,只要记住,typeof o != 'object',则 instanceof运算毫无意义

@HarryZD 是我自己理解不清晰. instanceof 记得是按原型链判断的… 而且反直觉 @lb1064 的还有楼下的描述清晰多了

回到顶部