(精华)2020年7月3日 JavaScript高级篇 ES6(Symbol数据结构)

    技术2024-09-29  50

    概念以及引入的原因

    // 新提出的一个数据结构 Symbol 基本数据类型 // Symbol表示独一无二 第七种数据类型 // 对象的属性是字符串 对象的话隐式调用toString 转化成字符串 let a = {a:1}; let b = {b:2}; let c = {}; c[a] = 3; // [object Object] c[b] = 4; // [object Object] console.log(c); // ? 怎么解决 let s = Symbol() console.log(typeof s); // 第七种一般数据类型

    接收字符串作为参数

    let s1 = Symbol('a') let s2 = Symbol('b') console.log(s1); console.log(s2); console.log(s1.toString()); console.log(s2.toString()); let s3 = Symbol({}) console.log(s3); // 传入的参数只是值得描述 即使传入的值是一样的 返回值也是不相等的 let s4 = Symbol() let s5 = Symbol(); console.log(s4 === s5); let s6 = Symbol('a') let s7 = Symbol('a'); console.log(s6 === s7);

    不能与其他类型的值进行计算

    let sym = Symbol('my Symbol') 'my symbol is' + sym

    Symbol可以显示转化为字符串

    let s1 = Symbol('a') let s2 = Symbol('b') console.log(s1); console.log(s2); console.log(s1.toString()); console.log(String(s1));

    Symbol可以转为布尔值 但是不能转化成数值

    let symb = Symbol(); console.log( !Boolean(symb));

    Symbol.iterator 属性

    对象的Symbol.iterator属性 指向该对象的默认遍历器的方法 for...of 循环的时候会调用Symbol.iterator

    Object.getOwnPropertySymbols()

    const obj = {}; let sym1 = Symbol('a') let sym2 = Symbol('b') obj[sym1] = 'hello' obj[sym2] = 'world' // Object.getOwnPropertySymbols() 返回一个数组 里面的值是所有用作属性名的Symbol的值 const arr = Object.getOwnPropertySymbols(obj) console.log(arr);

    作用实例 常量枚举 私有属性

    // 会实现私有属性 const private = Symbol('private') const obj = { // 私有属性 _name:'张三', [private]:'私有的属性' } console.log(Object.keys(obj));
    Processed: 0.012, SQL: 9