zoukankan      html  css  js  c++  java
  • ES6学习之Symbol

    定义:一种新的原始数据类型,表示独一无二的值

    const a = Symbol();
    const b = Symbol("foo") //接收参数的Symbol,参数表示对Symbol的描述

    相同参数的Symbol不相等

    const a = Symbol();
    const b = Symbol();
    a === b //false
    const c = Symbol("foo");
    const d = Symbol("foo");
    c === d //false

    symbol值不能与其他类型做运算,但能显示的转化为字符串和布尔值

    const c = Symbol("foo");
    let d = "hello" + c;    //TypeError: Cannot convert a Symbol value to a string
    String(c); //Symbol(foo)
    c.toString(); //Symbol(foo)
    Boolean(c) //true

    Symbol作为属性名,不能使用点符号,只能使用括号括起来

    const a = Symbol("foo");
    let b = {};
    b.a = "Hello";
    b[a] = "Hi";
    console.log(b[a]) //Hi

    Symbol作为属性名,遍历时:该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回。但是可以通过Object.getOwnPropertySymbols获取Symbol的属性名

    const obj = {};
    let a = Symbol('a');
    let b = Symbol('b');
    
    obj[a] = 'Hello';
    obj[b] = 'World';
    
    const objectSymbols = Object.getOwnPropertySymbols(obj);
    
    objectSymbols
    // [Symbol(a), Symbol(b)]

    Symbol.for(),Symbol.keyFor()

    • Symbol.for():接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
    const a = Symbol.for("foo");
    const b = Symbol.for("foo");
    a ===b //true
    • Symbol.keyFor():返回一个已登记的 Symbol 类型值的key
    let s1 = Symbol.for("foo");
    Symbol.keyFor(s1) // "foo"
    
    let s2 = Symbol("foo");
    Symbol.keyFor(s2) // undefined
  • 相关阅读:
    Java泛型【转】
    沉着
    selenium 自动化测试面试题及答案
    50道JAVA基础编程练习题
    50道JAVA基础编程练习题
    Kibana+Logstash+Elasticsearch 日志查询系统
    Java中this和super的用法总结
    Tensorflow官方文档中文版——第二章(瞎奖杯写)
    LATEX ——WinEdt 破解
    超参数优化
  • 原文地址:https://www.cnblogs.com/sghy/p/7793193.html
Copyright © 2011-2022 走看看