daz*_*mic 5 javascript arrays object
有人可以解释以下代码的行为吗?
let obj = {a:1, b:2}
let i = ['a']
console.log(obj[i])
>> 1
Run Code Online (Sandbox Code Playgroud)
为什么连数组都可以用来访问对象内部的属性?附带说明,这仅适用于长度为1的数组。我曾尝试对此进行研究,但据我所知,目前还没有任何文档解释为什么它应该起作用。
属性名称始终是字符串或符号。
如果传递的不是字符串或符号,它将转换为字符串。
toString()数组的默认方法大致为:
String.prototype.toString = function () { return this.join(","); }
Run Code Online (Sandbox Code Playgroud)
因此['a']被转换为'a'。
附带说明一下,这仅适用于长度为1的数组。
对于更长的数组,它可以正常工作。您只需要一个匹配的值:
String.prototype.toString = function () { return this.join(","); }
Run Code Online (Sandbox Code Playgroud)
而且由于任何对象都可以转换为字符串,并且您可以自定义toString方法,所以您可以做一些奇怪的事情:
const o = {
"a,b": "Hello"
}
const a = ["a", "b"];
console.log("" + a);
console.log(o[a]);Run Code Online (Sandbox Code Playgroud)
(请注意,做真正奇怪的事情通常是一个愚蠢的想法,这使得两周后调试您自己的代码变得困难)。