Имена свойств всегда являются строками или символами .
Если вы передаете что-то, что не является строкой или символом, оно преобразуется в строку.
Метод toString()
по умолчанию для массива примерно равен:
String.prototype.toString = function () { return this.join(","); }
То есть ['a']
преобразуется в 'a'
.
В качестве примечания, это работает только с массивом длины 1.
Работает нормально смассивы, которые длиннее.Вам просто нужно соответствующее значение:
const o = {
"a,b": "Hello"
}
const a = ["a", "b"];
console.log("" + a);
console.log(o[a]);
И поскольку любой объект может быть преобразован в строку, и вы можете настроить метод toString
, вы можете делать действительно странные вещи:
const data = {
"42": "Hello"
}
class Weird {
constructor(x) {
this.x = x;
}
toString() {
return this.x + 40;
}
}
const w = new Weird(2);
console.log(data[w]);
(Обратите внимание, что делать действительно странные вещи - это, как правило, глупая идея, которая затрудняет отладку собственного кода через две недели).