JavaScript中是否存在满足恒等条件的索引值?
问题解答:JavaScript是否存在通用恒等索引值
首先直接给出结论:不存在对所有原生普通对象、数组都生效的通用恒等索引值 x。
原因说明
- JavaScript中数组本质上也是特殊对象,访问
obj[key]时,传入的key会被自动转换为字符串或Symbol类型作为属性名查找。 - 所有原生数组、普通对象的默认自有属性和原型继承属性中,没有任何一个通用属性的值指向对象本身,自然不存在一个固定的
x能让所有obj[x]都等于obj自身。
特殊场景说明
仅在你主动做自定义改造的情况下,可以实现单个对象的恒等索引效果,但不具备通用性:
- 手动给对象添加指向自身的属性
let a = [1, 2, 3, 4]; a.self = a; console.log(a['self'] == a); // 输出true,仅对当前这个a数组生效
- 使用Proxy代理对象的读取逻辑
const identityProxy = target => new Proxy(target, { get: () => target }) let b = identityProxy({a:1, b:2, c:3}); // 此时不管x填什么,b[x]都等于b本身,但这是代理对象不是原生普通对象
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

