• 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项目地址

    微信小程序实例列表

    前端笔记列表

    游戏列表

  • 相关阅读:
    Java-- 异常之使用finally进行清理
    请几天假
    Java-- 重新抛出异常
    Java-- 异常与记录日志
    Java-- 异常(2)
    Java基础——多线程(4)
    Java基础——多线程(3)
    Java基础——面向对象练习题
    Java基础——多线程(2)
    Java基础——多线程(1)
  • 原文地址:https://www.cnblogs.com/linewman/p/9918506.html
Copyright © 2020-2023  润新知