__defineGetter__(0x1000, () => 1)
有效吗?
__defineGetter__
的第一个参数应为属性,第二个参数为函数。
0x1000是有效的属性名称吗?还是__defineGetter__
接受其他东西作为第一辩护?
答案 0 :(得分:1)
尽管令人困惑,但0x1000
确实是有效的属性。
let x = {}
x.__defineGetter__(0x1000, () => 1)
x[0x1000] // == x['4096'] == 1
不过,更一般而言,对象属性键是字符串,如果您使用的不是字符串,则将使用String(key)
将其转换为字符串。一个更明确的示例:
let x = {}
let y = {}
x.__defineGetter__(y, () => 1)
x[y] // == x['[object Object]'] == 1
因此,如果两个不同值(例如,两个不同对象)的字符串表示形式不同,则它们将充当 same 键(并映射到相同的值)。