'类型转换'是'JS'语言重要的一部分,能够非常灵活地将一种'数据类型'转换为另一种。然而'Symbol类型'在进行转换时非常不灵活,因为其他类型缺乏与
Symbol
值的合理等价,尤其是Symbol
无法被转换为字符串值或数值'。
String()转换
虽然说上面说不可以转换,其实只能转换成 Symbol(uid)
这种形式,想取到'描述内容'需要手动截取'描述内容'
let uid = Symbol.for("uid"), // 创建全局私有属性
test = Symbol('呵呵哒'), // 创建局部私有属性
desc = String(uid), // 转换成字符串
testString = String(test) // 转换成字符串
console.log(desc) // "Symbol(uid)"
console.log(testString) // "Symbol(呵呵哒)"
强制类型转换
将 uid
与空字符串相连接,会首先要求把 uid
转换为一个字符串,而这会引发错误,从而阻止了转换行为。
let uid = Symbol.for("uid"),
desc = uid + ""; // 引发错误!
相似地,你不能将 Symbol
转换为数值,对 Symbol
使用所有数学运算符都会引发错误,例如:
let uid = Symbol.for("uid"),
sum = uid / 1; // 引发错误!
此例试图把 Symbol
除以 1 ,同样引发了错误。无论对 Symbol
使用哪种数学运算符都会导致错误,但使用
逻辑运算符则不会,因为 Symbol
在逻辑运算中会被认为等价于 true
(就像 JS
中其他的非空值那样)。
网友评论