当前位置:   article > 正文

ES6中的 Symbol_es6 symbol

es6 symbol

目录

1.概述

2.symbol值的生成

3.作为属性名的Symbol值

4.symbol数据的总结注意


ES5中:5个基本数据类型 :number,boolean,string,null,undefined

               引用数据类型:对象(数组,函数都可称为对象)

ES6中:1个基本数据类型:Symbol(独一无二的)

后面还会学的 Bigint

所以问JS的数据类型有哪几种

回答:number,boolean,string,null,undefined,Symbol,Bigint,对象  共8种

引入:

  1. <script>
  2. //JS中
  3. var b = new Number(200);
  4. var b = 200; //显示写法 隐式写法是var b = new Number(200);
  5. b.age = 20;
  6. console.log(b); //一个new Number(200);
  7. console.log(b.age); //另外一个new Number(200); 两个是不同的
  8. </script>

1.概述

Symbol()是一个内置全局函数,生成一个独一无二的的数据。

symbol是一个ES6标准中新增的一种基本数据类型,

Symbol类型数据的原理:保证每一个属性名都是独一无二的,从根本上防止属性名的冲突

2.symbol值的生成

symbol 的值是通过 Symbol() 函数生成

  1. <script>
  2. let data = Symbol();
  3. console.log(data); //红色字体:Symbol() 表示Symbol数据
  4. console.log(typeof data); //"symbol"类型
  5. </script>

注意点:Symbol(),虽然像Array(),Object()等这些函数一样,是官方内置的函数,但是利用其生成symbol数据时却不用加new ,这是因为生成的 Symbol 是一个原始类型的值,并不是对象。

  1. let A = new Object(); //像这种生成对象都要加new
  2. //生成symbol类型数据就不加new
  3. let data = Symbol();

每一个 symbol 的值都是唯一的,Symbol() 函数可以接受一个字符串作为参数,表示对该值的描述,因此即使定义 symbol 使用相同的参数互相之间也不是相同的

  1. <script>
  2. let a1 = Symbol("G");
  3. let a2 = Symbol("G");
  4. console.log(a1 == a2); //false 不严格情况下都不相等,严格情况下更不相等
  5. //这里通俗理解为:两个不同的人,叫相同的名字G,你能说是同一个不?
  6. </script>

3.作为属性名的Symbol值

 symbol 类型的值可以作为对象的属性标识符使用,这也是 symbol 类型设计的目的。
现在对象属性名可以为两种类型一种就是原本的字符串类型一种即为新增的 symbol 类型。由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。

  1. <script>
  2. let mySymbol = Symbol();
  3. let mySymbol1 = Symbol();
  4. console.log(mySymbol); //Symbol类型数据 Symbol()
  5. let a = {};
  6. a[mySymbol]= "hello";
  7. a[mySymbol1] = "girl";
  8. console.log(a); //{Symbol(): 'hello', Symbol(): 'girl'}
  9. </script>

分析:看着a对象的两个属性名Symbol()是一样的,但是因为Symbol类型数据是每一个不一样的 ,所以是两个不同的属性名,只是形式一样而已

注意点:

1.Symbol作为对象属性名时,不能用点运算符。(点运算符后面总是字符串)

        因为点运算符是给对象添加一个属性,而不是像[ 变量名] 一样引用变量的值作为对象的属性。
2.在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中。方括号中的属性名代表了Symbol值。
3.Symbol 值作为属性名时,该属性还是公开属性,不是私有属性。

4.symbol数据的总结注意

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

2.symbol值不能与其他类型的值进行运算

  1. <script>
  2. let A = Symbol();
  3. // console.log("aaaa" + A);//Cannot convert a Symbol value to a string
  4. //无法将Symbol值 隐式 转换为字符串
  5. console.log(1 + A); //Cannot convert a Symbol value to a number
  6. //console.log(true + A); //布尔值会转为数字,Cannot convert a Symbol value to a
  7. //number
  8. </script>

3.虽然 symbol值 不能隐式转换为字符串,但是可以手动显示转换为字符串

  1. <script>
  2. let A = Symbol();
  3. console.log(A); //红色字体:Symbol() symbol类型数据
  4. console.log(A.toString());//黑色字体Symbol() 字符串类型数据"Symbol()"
  5. </script>

那是否可以显示转换为其它数据类型呢?

  1. <script>
  2. let A = Symbol();
  3. console.log(Boolean(A)); // true
  4. console.log(Number(A));; // TypeError: Cannot convert a Symbol value to a number
  5. </script>

总结:可以显示转换为字符串,和布尔值(不能与布尔值进行运算,比如说加法,布尔值会先转换为数字,但是symbol数据又不能跟数字型进行计算,所以不能。),不能转换为数字型数据。 

4.通过 symbol.description 可以获得定义symbol型数据的描述(Symbol()的参数字符串)

  1. <script>
  2. let A = Symbol("girl");
  3. console.log(A.description); //"girl"
  4. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/909239
推荐阅读
相关标签
  

闽ICP备14008679号