[] [[]] 的结果是未定义 其中 [[]] [] 抛出 SyntaxError:Unexpected token] 。 有什么解释吗?
答案 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 ???