ES6学习之路10----Symbol

什么是Symbol

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。

JavaScript 语言的七种数据类型:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)、Symbol。

作用:Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

let symbol = Symbol();
console.log(typeof symbol);;// symbol

1.Symbol函数前不能使用new命令,否则会报错。

let symbol = new Symbol();
//Uncaught TypeError: Symbol is not a constructor

2.Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

let symbol1 = Symbol('Rattenking');
let symbol2 = Symbol('Stone');

//控制台输出红色
console.log(symbol1);//Symbol(Rattenking)
console.log(symbol2);//Symbol(Stone)

//控制台输出黑色
console.log(symbol1.toString());//Symbol(Rattenking)
console.log(symbol2.toString());//Symbol(Stone)

3.Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。

let obj = {'a':'Rattenking'};
let sym = Symbol(obj);
console.log(sym);//Symbol([object Object])

//在对象中定义一个toString方法,调用该对象的toString的方法就会执行内部的toString方法
let obj1 = {
  toString() {
    return 'abc';
  }
};
let sym1 = Symbol(obj1);
console.log(sym1);// Symbol(abc)

4.Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。

let sym1 = Symbol();
let sym2 = Symbol();
console.log(sym1);//Symbol()
console.log(sym2);//Symbol()
sym1 === sym2//false

let sym1 = Symbol('Rattenking');
let sym2 = Symbol('Rattenking');
console.log(sym1);//Symbol('Rattenking')
console.log(sym2);//Symbol('Rattenking')
sym1 === sym2//false

5.Symbol 值不能与其他类型的值进行运算,会报错。

let sm = Symbol();
console.log(sm + 'Rattenking');
//Uncaught TypeError: Cannot convert a Symbol value to a string

6.Symbol 值也可以转为布尔值,但是不能转为数值。

let sm = Symbol();
console.log(Boolean(sm));//true
if(sm){console.log('sm is true');}//sm is true

console.log(sm + 1);
//VM328:5 Uncaught TypeError: Cannot convert a Symbol value to a number

总结:

  1. Symbol函数前不能使用new命令,否则会报错。
  2. Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。—-参数为字符串
  3. Symbol 的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。—-如参数不是字符串会调用对象的toString方法
  4. Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。—-每一个Symbol 都是独一无二的
  5. Symbol 值不能与其他类型的值进行运算,会报错。—-不能进行运算
  6. Symbol 值也可以转为布尔值,但是不能转为数值。—-可转布尔,不能转数字

其他

我的博客,欢迎交流!

我的CSDN博客,欢迎交流!

微信小程序专栏

前端笔记专栏

微信小程序实现部分高德地图功能的DEMO下载

微信小程序实现MUI的部分效果的DEMO下载

微信小程序实现MUI的GIT项目地址

微信小程序实例列表

前端笔记列表

游戏列表

原文地址:https://www.cnblogs.com/linewman/p/9918506.html