为什么1 [1]在javascript中被评估为未定义?

时间:2017-02-18 03:06:29

标签: javascript node.js

数字1是否隐式地转换为空数组?

> a = 1[1]
undefined
> console.log(a)
undefined
undefined

1 个答案:

答案 0 :(得分:4)

  

数字1是否隐式地转换为空数组?

没有。数值隐式(并临时)转换为数字对象,并在该对象上访问属性1

您正在使用的括号表示法[1])并非特定于数组,每个对象属性都可以通过括号表示法访问。即以下两个是等效的:obj.foo(点表示法)和obj['foo'](括号表示法)。

但是,数字对象没有属性1,并且访问不存在的属性会返回undefined

var numObj = new Number(1);
console.log(numObj[1]);

每次访问原始值上的属性时都会发生隐式转换,无论属性是否存在。在以下示例中,原始数值也会隐式转换为对象,然后执行其toFixed方法:

var num = 42;
console.log(num.toFixed(2));
// or equivalently to your example:
console.log(42['toFixed'](2))

Numbers,Strings,Booleans和Symbols具有对象等价物。 Null和Undefined不会。