【问题标题】:Create a unique object identifier with javascript使用 javascript 创建唯一的对象标识符
【发布时间】:2017-07-12 18:30:44
【问题描述】:

我在客户端使用的对象需要一个唯一的 ID。我的对象数组非常小,通常是 4 项,不多。

我用这个:

export class MyItem {   
    uniqueObjectIdentifier: number;
    constructor(obj) {    
        this.uniqueObjectIdentifier = Math.random();
    }
}

是否有一些可能是 javascript 或 Angular 内部的东西我可以访问而不是手工制作的属性?

【问题讨论】:

  • 未标记,因为我对angulartypescriptecmascript-6 了解不够,但这与this 是同一个问题吗?
  • Math.random() 有什么问题?
  • Math.random() 不是唯一的。在 javascript 中它实际上是伪随机的,所以它最终会重复自己。
  • 你想用这个id做什么?为什么你认为你需要它们?每个对象都已经有一个区别于其他对象的标识。
  • 我认为这是解决方案:stackoverflow.com/questions/2020670/javascript-object-id javascript 没有内置标识符。我在客户端为数据网格创建了对象。当前编辑的一个对象显示了我需要唯一 ID 的编辑模板 :-)

标签: javascript angular typescript ecmascript-6


【解决方案1】:

您可以使用Symbol

从 Symbol() 返回的每个符号值都是唯一的。

export class MyItem {
  uniqueObjectIdentifier: symbol;
  constructor(obj) {
    this.uniqueObjectIdentifier = Symbol();
  }
}

如果浏览器支持不允许您使用符号,则可以使用对对象的引用。

export class MyItem {
  uniqueObjectIdentifier: object;
  constructor(obj) {
    this.uniqueObjectIdentifier = {};
  }
}

【讨论】:

  • 想知道Symbol(){} 与实际的var item1 = new MyItem(); item2 = new MyItem() 有何不同
  • > 符号值可以用作对象属性的标识符。有内置的特殊符号,例如迭代器。此外,符号的目的是成为唯一标识符。对象的目的是成为对象。在这方面,{}new MyItem() 没有区别。
  • @bhantol A Symbol 类似于 Object,但比真正的 Object 简单得多。例如,您不能将自定义属性分配给Symbol。所以它可能需要更少的内存。
  • 和 Math.random() 目的是一个随机数,不是唯一的;-)
  • 为什么浏览器支持有问题?这可以通过 Symbol polyfill 解决,并且 polyfill 在每个 Web 项目中都是一等公民。
【解决方案2】:

TypeScript 中,您可以这样做:

export class MyItem {
  static currentId: number = 0;
  uniqueObjectIdentifier: number;

  constructor(obj) {
    this.uniqueObjectIdentifier = MyItem.currentId++;
  }
}

JavaScript ES6 中:

export class MyItem {
  constructor(obj) {
    this.uniqueObjectIdentifier = MyItem.currentId++;
  }
}
MyItem.currentId = 0;

或者您可以使用未导出的、模块范围的变量来保存计数器:

let currentId = 0;

export class MyItem {
  constructor(obj) {
    this.uniqueObjectIdentifier = currentId++;
  }
}

这样currentId 就不能从模块外部修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    相关资源
    最近更新 更多