ES6(六)符号与符号属性2

2020-05-20  本文已影响0人  蒋小花_4b6c

1.符号值的转换

2.检索符号属性

3.使用知名符号暴露内部方法

(跳过)

符号值的转换

符号类型在进行转换时非常不灵活,因为其他类型缺乏与符号值的合理等价,尤其是符号值无法 被转换为字符串值或数值。

因此将符号作为属性所达成的效果,是其他类型所无法替代的。

本章之前的例子使用了 console.log() 来展示符号值的输出,

能这么做是由于自动调用了符号的 String() 方法来产生输出。你也可以直接调用 String() 方法来获取相同结果,

let uid = Symbol.for("uid"),

desc = String(uid);

console.log(desc); // Symbol(uid)

 String() 方法调用了 uid.toString() 来获取符号的字符串描述信息。

但若你想直接将符号 转换为字符串,则会引发错误

let uid = Symbol.for("uid"),

desc = uid + ""; // 错误

不能将符号转换为数值,对符号使用所有数学运算符都会引发错误

let uid = Symbol.for("uid"),

sum = uid / 1;  // 引发错误!

无论对符号使用哪种数学运算符都会导致错误,但使用逻辑运算符则不会,

因为符号值在逻辑运算中会被认为等价于true (就像 JS 中其他的非空值那样)

检索符号属性

Object.keys()  与 Object.getOwnPropertyNames() 方法可以检索对象的所有属性名称,

前者返回所有的可枚举属性名称,而后者则返回所有属性名称 而无视其是否可枚举。

两者都 不能返回符号类型的属性

ES6 新增了Object.getOwnPropertySymbols() 方法,可以检索对象的符号类型属性。

let uid = Symbol.for("uid");

let object = {

    [uid]: "12345"

};

let symbols = Object.getOwnPropertySymbols(object);

console.log(symbols.length); // 1

console.log(symbols[0]); //Symbol(uid)

console.log(object[symbols[0]]); // 12345

使用知名符号暴露内部方法

上一篇 下一篇

猜你喜欢

热点阅读