美文网首页
es6学习笔记整理(八)Symbol的用法

es6学习笔记整理(八)Symbol的用法

作者: 尤樊容 | 来源:发表于2018-03-02 17:35 被阅读54次
Symbol数据类型

概念:这种数据类型提供一个独一无二的值,也就是说Symbol声明的变量a和变量b永远不可能相等。
声明

            let a = Symbol();
            let b = Symbol();
            console.log(a === b); //false 

它自己都不会等于它自己
Symbol.for

            let c = Symbol.for("aaa");
            let d = Symbol.for("aaa");
            console.log(c === d); //true

Symbol.for和Symbol的唯一区别是 Symbol.for创建的两个实例可能相等, 根据Symbol的参数生成实例, 如果参数一样, 那么会返回同一个实例。
看到这里,还完全不知道要怎么使用,不急不急,接下来。。。

使用:

           let a = Symbol.for('abc');
           let obj = {
               [a]:'111',
               'abc':222,
               'b':333
           };
           console.log('obj',obj);//{abc: 222, b: 333, Symbol(abc): "111"}
           console.log(Symbol.keyFor(a)); // abc 检索字符串键

这种使用就可以避免对象中键值相同替换的问题
但是这样使用会有一个问题,对象中使用Symbol做键值,通过for in 和 let of是拿不到那个属性。
···
for(let [key,value] of Object.entries(obj)){
console.log('entries',key,value);//abc 222;b 333
}
···
解决方法: Object.getOwnPropertySymbol()返回值是数组, 但是这个只能打印出Symbol做键值的值,这就尴尬了,下面使用reflect.ownKeys来解决这个问题

            Object.getOwnPropertySymbols(obj).forEach(function (item) {
                console.log('getOwnPropertySymbols', obj[item]);//111
            });

reflect.ownKeys()返回的也是数组

            Reflect.ownKeys(obj).forEach(function (item){
                console.log('ownKeys', item, obj[item]);
                /*ownKeys abc 222
                 * ownKeys b 333
                 * ownKeys Symbol(abc) 111
                 * */
            });

到这里也感觉了解甚浅,后面有机会补充。

相关文章

  • es6学习笔记整理(八)Symbol的用法

    Symbol数据类型 概念:这种数据类型提供一个独一无二的值,也就是说Symbol声明的变量a和变量b永远不可能相...

  • Symbol

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

  • ES6功能教程

    Symbol ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一...

  • ES6学习笔记——Symbol

    1、概述 ES5 的对象属性名都是字符串,这样有一个问题是容易造成属性名的冲突。比如,你使用了一个他人提供的对象,...

  • ES6学习笔记--Symbol

    创建符号值 Symbol没有字面量形式,这在JS的基本类型中是独一无二的.可以用全局函数来创建符号值 符号值是基本...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • JavaSctipt 语言类型和类型检测

    内置类型 JavaScript目前有八种内置类型(包含ES6的symbol): null undefined st...

  • 2.let 和 const 命令

    阮一峰ES6教程学习笔记原文地址 1. let和var let:ES6 新增命令用法类似于var,但是所声明的变量...

  • 【es6笔记】es6的入门简介_Symbol(4)

    这里整理了ES6新增的类型Symbol。 欢迎大家的意见和交流 email: li_mingxie@163.com

网友评论

      本文标题:es6学习笔记整理(八)Symbol的用法

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