Symbol 强制类型转换

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容