为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的唯一对象标识符

JavaScript中的唯一对象标识符

萧十郎 2019-11-28 12:56:03
我需要做一些实验,我需要知道javascript中对象的某种唯一标识符,因此我可以查看它们是否相同。我不想使用相等运算符,我需要类似python中的id()函数的功能。是否存在这样的东西?
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

就我的观察而言,此处发布的任何答案都可能具有意想不到的副作用。


在与ES2015兼容的环境中,可以使用WeakMap避免任何副作用。


const id = (() => {

    let currentId = 0;

    const map = new WeakMap();


    return (object) => {

        if (!map.has(object)) {

            map.set(object, ++currentId);

        }


        return map.get(object);

    };

})();


id({}); //=> 1


查看完整回答
反对 回复 2019-11-28
?
Qyouu

TA贡献1786条经验 获得超11个赞

最新的浏览器提供了一种更干净的方法来扩展Object.prototype。此代码将从属性枚举中隐藏该属性(对于o中的p)


对于实现defineProperty的浏览器,可以实现如下的uniqueId属性:


(function() {

    var id_counter = 1;

    Object.defineProperty(Object.prototype, "__uniqueId", {

        writable: true

    });

    Object.defineProperty(Object.prototype, "uniqueId", {

        get: function() {

            if (this.__uniqueId == undefined)

                this.__uniqueId = id_counter++;

            return this.__uniqueId;

        }

    });

}());

有关详细信息,请参见


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 1270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信