JavaScript中的唯一对象标识符

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

是否存在这样的东西?

回答:

我下面的原始答案写在6年前,其风格与时代和我的理解相吻合。为了回应评论中的某些对话,一种更现代的方法如下:

(function() {

if ( typeof Object.id == "undefined" ) {

var id = 0;

Object.id = function(o) {

if ( typeof o.__uniqueid == "undefined" ) {

Object.defineProperty(o, "__uniqueid", {

value: ++id,

enumerable: false,

// This could go either way, depending on your

// interpretation of what an "id" is

writable: false

});

}

return o.__uniqueid;

};

}

})();

var obj = { a: 1, b: 1 };

console.log(Object.id(obj));

console.log(Object.id([]));

console.log(Object.id({}));

console.log(Object.id(/./));

console.log(Object.id(function() {}));

for (var k in obj) {

if (obj.hasOwnProperty(k)) {

console.log(k);

}

}

// Logged keys are `a` and `b`

如果您对旧版浏览器有要求,请在此处查看的浏览器兼容性Object.defineProperty

原始答案保留在下面(而不是仅在更改历史记录中),因为我认为比较很有价值。


您可以旋转以下内容。这也使您可以选择在其构造函数或其他地方显式设置对象的ID。

(function() {

if ( typeof Object.prototype.uniqueId == "undefined" ) {

var id = 0;

Object.prototype.uniqueId = function() {

if ( typeof this.__uniqueid == "undefined" ) {

this.__uniqueid = ++id;

}

return this.__uniqueid;

};

}

})();

var obj1 = {};

var obj2 = new Object();

console.log(obj1.uniqueId());

console.log(obj2.uniqueId());

console.log([].uniqueId());

console.log({}.uniqueId());

console.log(/./.uniqueId());

console.log((function() {}).uniqueId());

请注意,确保您用于内部存储唯一ID的任何成员都不会与另一个自动创建的成员名称发生冲突。

以上是 JavaScript中的唯一对象标识符 的全部内容, 来源链接: utcz.com/qa/424763.html

回到顶部