多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] >[success] # Symbol与类型强制转换 ~~~ '类型转换'是'JS'语言重要的一部分,能够非常灵活地将一种'数据类型'转换为另一种。然而'Symbol类型'在进行 转换时非常不灵活,因为其他类型缺乏与'Symbol'值的合理等价,尤其是'Symbol无法被转换为字符串值或数值'。 ~~~ <br/> >[success] ## 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(呵呵哒)" ~~~ <br/> >[warning] ## 强制类型转换 ~~~ 将'uid'与'空字符串'相连接,会首先要求把'uid'转换为一个'字符串',而这会引发错误,从而阻止了转换行为。 let uid = Symbol.for("uid"), desc = uid + ""; // 引发错误! ~~~ <br/> >[warning] ## Symbol转换成数字 ~~~ 相似地,你不能将'Symbol'转换为数值,对'Symbol'使用所有数学运算符都会引发错误,例如: let uid = Symbol.for("uid"), sum = uid / 1; // 引发错误! 此例试图把'Symbol'除以 1 ,同样引发了错误。无论对'Symbol'使用哪种数学运算符都会'导致错误',但使用 逻辑运算符则不会,因为'Symbol'在'逻辑运算中会被认为等价于true'(就像 JS 中其他的非空值那样)。 ~~~