美文网首页程序员
基本数据类型--Symbol学习笔记

基本数据类型--Symbol学习笔记

作者: Romyo | 来源:发表于2018-05-15 11:24 被阅读0次
 //Symbol 值通过`Symbol`函数生成
    let s=Symbol();
    console.log(typeof s); //symbol
//=============传字符串==============
    //`Symbol`函数可以接受一个字符串作为参数,
    //有了参数以后,就等于为它们加上了描述
    let s1=Symbol('foo');
    let s2=Symbol('bar');
    console.log(s1);  //Symbol(foo)
    console.log(s2);    //Symbol(bar)

    //转为字符串时,比较容易区分
    console.log(s1.toString()); //'Symbol(foo)'
    console.log(s2.toString()); //'Symbol(bar)'
//=============传对象==============
    //如果 Symbol 的参数是一个对象
    //就会调用该对象的`toString`方法,将其转为字符串,然后才生成一个 Symbol 值。
    const obj={
        toString(){
            return '自动调用toString方法';
        }
    }
    const sym=Symbol(obj);
    console.log(sym); //Symbol(自动调用toString方法)
//==========Symbol值不相等============
    //相同参数的`Symbol`函数的返回值是不相等的

    //无参数,不相等
    let s3=Symbol();
    let s4=Symbol();
    console.log(s3==s4);  //false
    console.log(s3===s4); //false
    console.log(s3!=s4);  //true
    console.log(s3!==s4); //true

    //有参数,也不相等
    let s5=Symbol('foo');
    let s6=Symbol('foo');
    console.log(s5===s6); //false
    let s7=Symbol('不能和其他类型运算,比如字符串拼接');
    //console.log('test'+s7);//Uncaught TypeError: Cannot convert a Symbol value to a string
    //console.log(`${s7}`);//Uncaught TypeError: Cannot convert a Symbol value to a string

    let s8=Symbol('可以显式转为字符串');
    console.log(String(s8));        //'Symbol(可以显式转为字符串)'
    console.log(s8.toString()); //'Symbol(可以显式转为字符串)'
  let s9=Symbol();
  console.log(Boolean(s9)); //true
  console.log(!!s9)                 //true
  console.log(!s9);                 //false

  if(s9){
    console.log('Symbol默认布尔值为true');
  }
  // console.log(Number(s9));
  // console.log(s9+2)
//作为属性名的Symbol
    let mySymbol=Symbol();

    //写法一
    let a={};
    a[mySymbol]='hello';

    //写法二
    let a={
      [mySymbol]:'hello'
    }

    //写法三
    let a={};
    Object.defineProperty(a,mySymbol,{
      value:'hello'
    });
    console.log(a[mySymbol])  //hello
//点运算符后面总是字符串,
//所以不会读取`mySymbol`作为标识名所指代的那个值
//导致`a`的属性名实际上是一个字符串,而不是一个 Symbol 值

    let _mySymbol=Symbol();
    let b={};
    b._mySymbol='Hello';
    console.log(b._mySymbol);     // string | 'Hello'
    console.log(b[_mySymbol]);    //undefined|undefined
    console.log(b['_mySymbol']);  // string | 'Hello'
//在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中
  let s = Symbol();

  //写法一
  /*let obj = {
    [s]: function (arg) { console.log('当前参数是:'+arg) }
  };*/

  //写法二
  let obj = {
    [s] (arg) { console.log('当前参数是:'+arg) }
  };
  
  console.log(obj[s](123))

相关文章

  • 基本数据类型--Symbol学习笔记

  • Symbol

    es6新增数据类型 -- 基本类型 值是由symbol函数调用产生的 Symbol的基本用法 Symbol的使用属...

  • Flutter之基本语法一

    一. 基础数据类型 Symbol基础数据类型Symbol 在JavaScript中是将基本数据类型转换为唯一标识符...

  • JAVASCRIPT数据类型

    数据类型 基本数据类型 String Number Boolean Null Undefined Symbol 引...

  • JavaScript数据类型

    基本数据类型:String Number Boolean Undefined Null Symbol 引用数据类型...

  • JavaScript

    Javascript 数据类型基本数据类型:string、number、boolean、symbol、undefi...

  • JS之数据类型

    基本数据类型:Undefined、Null、Boolean、String、Number、Symbol 复杂数据类型...

  • ES6新增数据类型

    symbol ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因...

  • 2018-08-06 第一天课 ES6前奏

    1.Symbol ES6新增的 数据类型 -基本类型 值是由Symbol 函数 调用产生的 相同的Symbol 函...

  • ES6 中的 Symbol

    JavaScript 之 Symbol Symbol是什么 Symbol是ES6中新引入的一种基本数据类型。Sym...

网友评论

    本文标题:基本数据类型--Symbol学习笔记

    本文链接:https://www.haomeiwen.com/subject/udsedftx.html