猿问

JavaScript中的唯一对象标识符

我需要做一些实验,我需要知道javascript中对象的某种唯一标识符,因此我可以查看它们是否相同。我不想使用相等运算符,我需要类似python中的id()函数的功能。

是否存在这样的东西?


萧十郎
浏览 1271回答 3
3回答

慕田峪9158850

就我的观察而言,此处发布的任何答案都可能具有意想不到的副作用。在与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

Qyouu

最新的浏览器提供了一种更干净的方法来扩展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;        }    });}());有关详细信息,请参见
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答