当var trees = new Array("redwood","bay","cedar")时,0的属性如何?

Mun*_*giu 6 javascript

我在mozilla文档中看到了这个例子,但我不明白为什么.

如果0是树的属性,我期待它trees.0会返回redwood但是是错误的声明.是a[0]一种访问数组的0属性的方法吗?在这种情况下a["length"]也应该工作(逻辑上).任何人都可以说清楚吗?

链接:developer.mozilla.org

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees;        // returns true
3 in trees;        // returns true
6 in trees;        // returns false
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 6

数组实际上是具有特殊约束的对象.

一般来说,对于一个对象,如果你写obj["key"]或者没关系obj.key.这就是为什么a["length"]有效的原因.

但是-除了一个事实,即一个数字是不是有效的标识符- a.0不是等同于a[0].由于括号表示法需要一个字符串,因此一个unqoted字面值将被视为变量的名称(它本身应该包含一个字符串).我将演示一个有效的标识符:

obj["foo"] = "bar";
obj.foo; // -> bar

var baz = "qwert";
obj[baz] = 5;
obj.baz   // -> undefined
obj.qwert // -> 5
// or
obj["qwert"] // -> 5
Run Code Online (Sandbox Code Playgroud)

数组也可以具有"对象"属性(如"长度"),您可以设置和检索它们.所以

trees.foo = "bar"
console.log(trees.foo) // -> "bar"
Run Code Online (Sandbox Code Playgroud)

作品.但是这些属性并不考虑数组的长度,也没有考虑推送和弹出等数组的典型方法.