Symbol 强制类型转换

2020-12-29  本文已影响0人  弹指一挥间_e5a3

'类型转换'是'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 中其他的非空值那样)。

上一篇 下一篇

猜你喜欢

热点阅读