JavaScript中[] [[]]和[[]] []之间的区别?

时间:2013-10-09 09:27:34

标签: javascript operators

[] [[]] 的结果是未定义 其中 [[]] [] 抛出 SyntaxError:Unexpected token] 。 有什么解释吗?

7 个答案:

答案 0 :(得分:4)

object[key]语法用于获取object key的属性,key必须在[][][[]],否则会有语法错误。

[],对象是一个空数组[],键是另一个空数组[[]][]

[],对象是一个内部有空数组的数组,而{{1}}内没有键。

答案 1 :(得分:2)

[]定义了一个空数组,因此[][[]]可以重写为:

var a = [];
var b = [];
var c = a[b];

现在通过索引访问数组,其中索引本身是一个数组是未定义的 - 标准没有说明应该发生什么,但它在语法上是有效的。

然而,[[]][]被打破 - 最接近的可以写成:

var a = [];
var b = [];
[b]a;

...这是无意义的代码。

答案 2 :(得分:2)

我不明白为什么有人会想要使用这样的东西,但这里有一个解释:

案例1:

[]是一个空数组。通过向[n]添加[][n],您可以引用第n个元素。你的案例中的 n []。解释器尝试将其转换为可用值,最后以空字符串(“”)结束。因此,您实际上尝试引用 undefined [][""]

案例2:

[[]]是一个空数组中的空数组。通过向[n]添加[[]][n],可以引用外部数组的第n个元素。您需要提供索引 n ,否则会引发错误,在您的情况下会发生错误。

答案 3 :(得分:1)

我无法想象为什么你需要使用它,但这是我的解释:

[[]]是新的Array(new Array()),它是一个包含ONE元素的数组,是一个空数组。

[]是一个空数组,因此您可以执行[] [2]或[] [0]并返回undefined。第二个[]是索引。

所以在[] [[]]中你正在寻找索引,索引[]。

[][0] == [][[]]

但在[[]] []中索引为空,相当于[1,2,3] [] - > SyntaxError:意外的标记]

答案 4 :(得分:0)

确定。只需使用密钥访问数组即可。否则会引发语法错误。

[][[]] - 已定义数组,您正在从该数组中访问未定义的键[]

[[]][] - 已定义数组,并且您没有传递任何键来访问该数组 - 语法错误。

答案 5 :(得分:0)

我猜是会发生类型转换:

[][
    // an index is expected here
    [] // so javascript probably tries to get a number from this empty array
]

这可能相当于:

[][+[]] // +[] gives 0

在此模式[[]][]中,两个数组并排声明。

答案 6 :(得分:0)

JavaScript对象具有与之关联的属性。您可以使用简单的点表示法或括号表示法访问对象的属性,如果non existing key提到它,则会提供undefined值。

var obj = {};
obj[ 'key' ] 

并且一个重要的事情是JavaScript数组中是一个Object

console.log( [] instanceof Object ) // gives true so it act like object
有趣的是,我们通过如下传递。

var keyCanbeFunction = function(){};
var keyCanbeObject = {};
var keyCanbeArray = [] ;

console.log( obj[ keyCanbeArray ] ) // gives undefined, that key not exists

和第一种情况

var obj = [];
obj[ keyCanbeArray  ] // gives undefined

和第二个案例

var obj = [[ ]]
obj[]; // where is key ???