当前位置: 首页 > 面试题库 >

JavaScript中的唯一对象标识符

贡威
2023-03-14
问题内容

我需要做一些实验,并且需要知道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的任何成员都不会与另一个自动创建的成员名称发生冲突。



 类似资料:
  • 问题内容: 这将类似于该方法。 我需要将无法控制的对象存储在一个集中,并确保只有两个对象实际上是同一对象(不包含相同的值)时,这些值才会被覆盖。 问题答案: 会帮你的忙。但我很好奇,对象集(按值组合对象)有什么问题? 对于您的特定问题,我可能会保留一组ID或包装对象。包装对象将包含一个引用,并按<==>进行比较。 还值得注意的是,Python对象也具有功能。该功能对于将对象放入集合或字典是必需的。

  • 假设我有以下对象数组 现在我想收集具有唯一对象(匹配和)的数组,即。 我能收集所有的东西 但不知道如何过滤掉重复的。有什么建议吗? 编辑:两个不同数组上的我的对象不相同。至少基于属性的数量。

  • 唯一标识符 guid(length = 32, firstU = true, radix = 62) 该函数可以生产一个全局唯一、随机的guid,默认首字母为u,可以用于当做元素的id或者class名等需要唯一,随机字符串的地方,因为id或者class不能以数字开头。 length <Number | null> guid的长度,默认为32,如果取值null,则按rfc4122标准生成对应格式的随

  • 我想通过允许用户双击一个切片来向下钻取来使我的饼图交互式。我相信这样做的方法是在画布上创建一个onClick处理程序,并使用来确定单击了哪个切片。 不过,调用返回的段数据可能不明确。这是返回数据的示例: 在这些字段中,只有< code>value 、< code>fillColor 、< code>highlightColor和< code>label是由我提供的,它们都不一定是唯一的。我可以确保

  • 我正在尝试使用唯一ID将JSON对象存储在数组中,以便我可以在以后的代码中提取该特定对象,但是我的预期输出没有发生:

  • 我使用下一个endpoint来获取“https://graph.microsoft.com/v1.0/users/?$select=id,displayName,mail,userPrincipalName“根据文档:https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0没有关于用户资源类型的唯一