ES6新数据类型Symbol

Posted xvivx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6新数据类型Symbol相关的知识,希望对你有一定的参考价值。

Symbol

需计算字面量属性时使用

const benz = Symbol(‘benz‘);
const car = {
    [benz]: ‘benz car‘
};

const info = Symbol(‘my car info‘);

// 此时定义info为可枚举属性
Object.defineProperty(car, info, {
    value: ‘benz car description‘,
    enumerable: true
});

// 定义price为不可枚举属性
Object.defineProperty(car, ‘price‘, {
    value: 1000000
});

注意上例中info与price均不可枚举,无法使用 for-in 遍历, 使用 Object.keys 也无法得到属性名。符号类型的属性均不可被枚举。

共享符号

Symbol.for 会搜索全局符号注册表,查找以传入的参数为键值,找到即返回该符号值,找不到再创建一个符号值并返回该值。
Symbol.keyFor 可以根据符号值在全局符号注册表中返回检索出的键值。

符号值的转换

符号值无法转换为字符串和数字,所以将符号值做为对象属性所带来的效果是其他类型无法替代的。将符号值与字符串进行拼接时会发生错误。

检索对象属性

我们将对象的属性分为符号值属性和普通属性,使用 Object.keys 或者 Object.getOwnPropertyNames 可以拿到对象的普通属性,前者拿到的是可枚举的普通属性,后者是所有普通属性,这样是为了兼容ES5,ES6里新增了 Object.getOwnPropertySymbols 用来检索符号值属性,不管符号值属性可不可枚举都能拿到。

以上是关于ES6新数据类型Symbol的主要内容,如果未能解决你的问题,请参考以下文章

ES6新特性使用小结

ES6 Symbol类型

ES6 新增基本数据类型Symbol

简述ES6的数据类型

ReactNative进阶(二十八):ES6 Symbol用法

ES6 前端必学ES6,看完掌握新特性