JS的第七种语言类型--symbol

今天浏览网页的时候发现,JS中有七种语言类型。我的内心???
百度一下哪里来的第七种!!

好吧跟着来回顾一下JS的前6种
undefined null boolean string numver object
还有一个,新来的小伙,symbol

当我百度过后得到以下答案:

表示独一无二的值,它是一切非字符串的对象key的集合。 Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。 Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,但是即使描述相同,Symbol值也不相等。
另一方面,每个 Symbol 都是独一无二的,不与其它 Symbol 重复(即便是使用相同的 Symbol 描述创建),创建一个 Symbol 就跟创建一个对象一样方便。

let tip = Symbol("xx");
let tap= Symbol("xx");

console.log(tip== tap); // false

值得注意的是:与其它类型不同的是,Symbol 不能自动被转换为字符串,当尝试将一个 Symbol 强制转换为字符串时,将返回一个 TypeError。

> var sym = Symbol("<3");
> "your symbol is " + sym
// TypeError: can't convert symbol to string
> `your symbol is ${sym}`
// TypeError: can't convert symbol to string
  
> var sym = Symbol("<3");
> "your symbol is " + sym
// TypeError: can't convert symbol to string
> `your symbol is ${sym}`
// TypeError: can't convert symbol to string

应该避免这样的强制转换,应该使用 String(sym) 或 sym.toString() 来转换。
获取 Symbol 的三种方法

    1. Symbol() 每次调用时都返回一个唯一的 Symbol。
    2. Symbol.for(string) 从 Symbol 注册表中返回相应的 Symbol,与上个方法不同的是,Symbol 注册表中的 Symbol 是共享的。也就是说,如果你调用 Symbol.for(“cat”) 三次,都将返回相同的 Symbol。当不同页面或同一页面不同模块需要共享 Symbol 时,注册表就非常有用。
    3. 3.Symbol.iterator 返回语言预定义的一些 Symbol,每个都有其特殊的用途。
原文地址:https://www.cnblogs.com/JiAyInNnNn/p/11468250.html