[ ][[ ]]的结果未定义 ,因为 this [[ ]][ ]抛出SyntaxError: Unexpected token ]。有什么解释吗?
7 回答
object[key]
语法用于通过 获取 的属性,该属性object
必须在key
里面,key
否则[]
会出现语法错误。
[][[]]
,对象是一个空数组[]
,键是另一个空数组[]
。
[[]][]
,对象是一个数组,里面有一个空数组,而里面没有键[]
。
[]
定义一个空数组,因此[][[]]
可以重写为:
var a = [];
var b = [];
var c = a[b];
现在通过索引访问数组,其中索引本身是一个数组是未定义的——标准没有说明应该发生什么,但它在语法上是有效的。
然而[[]][]
被打破了——这可以写成最接近的手写体是:
var a = [];
var b = [];
[b]a;
...这是胡说八道的代码。
我不明白为什么有人会想要使用这样的东西,但这里有一个解释:
情况1:
[]
是一个空数组。通过添加[n]
( [][n]
),您可以引用第 n 个元素。n在你的情况下是[]
. 解释器尝试将其转换为可用值并以空字符串 ("") 结束。因此,您实际上尝试[][""]
引用undefined。
案例二:
[[]]
是一个空数组中的一个空数组。通过添加[n]
( [[]][n]
),您可以引用外部数组的第 n 个元素。您需要提供索引n,否则会引发错误,这在您的情况下会发生。
我无法想象你为什么需要使用它,但这是我的解释:
[[]] 是 new Array(new Array()),它是一个元素为 ONE 的数组,一个空数组。
[] 是一个空数组,因此您可以执行 [][2] 或 [][0] 并返回 undefined。第二个 [] 是索引。
因此,在 [] [[]] 中,您正在寻找一个索引,即索引 []。
[][0] == [][[]]
但在 [[]] [] 中,索引为空,相当于 [1,2,3][] -> SyntaxError: Unexpected token ]
JavaScript 对象具有与之关联的属性。您可以使用简单的点表示法或方括号表示法访问对象的属性,如果被non existing key
引用,它会给出undefined
值。
var obj = {};
obj[ 'key' ]
一件重要的事情是在 JavaScript 数组中是一个对象
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 ???
好的。只是你应该用一个键访问数组。否则会抛出语法错误。
[][[]]
- 数组已定义,并且您正在访问[]
该数组中未定义的键。
[[]][]
- 定义了数组,并且您没有传递任何键来访问该数组 - 语法错误。
我猜会发生类型转换:
[][
// an index is expected here
[] // so javascript probably tries to get a number from this empty array
]
这可能相当于:
[][+[]] // +[] gives 0
而在这种模式中,[[]][]
两个数组是并排声明的。