对象[[[“key”]]]如何在javascript中评估对象[“key”]?

前端之家收集整理的这篇文章主要介绍了对象[[[“key”]]]如何在javascript中评估对象[“key”]?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Why does accessing an element in an object using an array as a key work?3个
为什么javascript将以下内容评估为true,因为对象foo具有有效的属性栏?
foo[[[["bar"]]]] === foo["bar"]

基于运算符优先级,我认为foo [[[[“bar”]]]]试图以数组[[[“bar”]]]作为键来访问属性,但为什么它仍然“平坦化” “就像foo [”bar“]一样?

我的同事们说javascript解析器有简化括号,忽略了额外的括号.我不认为这是真的,因为将[[[“foo”]]]保存到变量测试会得到相同的结果:

> test = [[["bar"]]]
 [Array[1]]
> foo["bar"] = 5
 5
> foo[test]
 5

语言或解析器的哪个方面导致了这种行为?谢谢!

解决方法

JavaScript括号表示法接受表达式,但它始终将该表达式的值转换为字符串.因此,如果传入数组,它将尝试将其转换为字符串.在你的情况下,你传入一个数组[[[“bar”]]]和[[[“bar”]]].toString()===“bar”.

如果你想知道为什么[[[“bar”]]].toString()===“bar”,那是因为当数组arr被隐式转换为字符串时,就像调用arr.join(‘,’) .也就是说,它的每个元素都被转换为字符串,然后以逗号分隔的字符串连接.当数组只有一个元素时,数组的字符串表示只是该元素的字符串表示.在您的情况下,您的数组([[[“bar”]]])有一个元素:[[“bar”]].

该数组也被转换为字符串,因为它也是一个单元素数组,它的字符串表示形式是该单个元素的字符串表示形式:[“bar”].

[“bar”]也是一个带有一个元素的数组,它是一个字符串,因此[“bar”]的字符串表示只是“bar”.

这归结为:[[[“bar”]]].toString()===“bar”

和foo [[[[“bar”]]]]与foo [[[[“bar”]]].toString()]相同.

您还会发现:

foo[[[[1]],[2]]] === foo["1,2"]

因为:[[[1]],[2]].toString()===“1,2”.

原文链接:https://www.f2er.com/js/159071.html

猜你在找的JavaScript相关文章