网站建设类型,php网站开发目录,小游戏网页版链接,望野原文及翻译赏析JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示
对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString
返回对象的字符串表示Array类的toString方法会将每个元素转换为字符串#xff0c;再使用逗号作为…JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示
对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString
返回对象的字符串表示Array类的toString方法会将每个元素转换为字符串再使用逗号作为分隔符拼接起来Function类的toString方法将定义的函数转换为JS源代码的字符串Date类型的toString方法返回一个人类友好(且JS可解析)的日期和时间字符串RegExp类定义的toString方法将RegExp对象转换为一个看起来像RegExp字面量的字符串
valueOf
把对象转换为代表对象原始值(如果存在这样一个原始值)对象是复合值且多数对象不能真正通过一个原始值标识valueOf方法默认情况只返回对象本身String Number Boolean包装类定义的valueOf返回被包装的原始值Array Function RegExp 继承默认方法返回对象本身Date对象返回日期的内部表示形式: 自1970年1月1日至今的毫秒数
偏字符串 (该算法返回原始值只要可能就返回字符串)
首先尝试toString方法方法有定义且返回原始值则使用该原始值(即使这个值不是字符串)不存在或者存在但返回对象则尝试使用valueOf方法方法存在且返回原始值则使用该值。否则转换失败 TypeError
偏数值 (该算法返回原始值只要可能就返回数值)
与偏字符串算法类似先尝试valueOf再尝试toString
无偏好 (该算法不倾向于任何原始值类型而是由类定义自己的转换规则)
取决于被转换对象的类如果是Date对象则使用偏字符串算法其他类型使用偏数值算法 JS内置类型除了Date类都实现了偏数值算法;Date类实现了偏字符串算法 对象转换为布尔值
所有对象都转换为true不需要使用前面的转换算法包括空数组、new Boolean(false)包装对象
Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) /// true对象转换为字符串
使用偏字符串算法转换为一个原始值再将原始值转换为字符串
String({}) // [object Object]
String([]) //
String(new Date(2023)) // Sun Jan 01 2023 08:00:00 GMT0800 (中国标准时间)
String(new RegExp(/[a-z]/i)) // /[a-z]/i对象转换为数值
使用偏数值算法转换为一个原始值将原始值转换为数值
Number({}) // NaN
Number([]) // 0
Number([6]) // 6
Number(new Date(2023)) // 1672531200000
Number(new RegExp(/[a-z]i/)) // NaN操作符转换特例
操作符
执行数值加法和字符串拼接如果一个操作数是对象则使用无偏好算法将对象转换为原始值如果两个操作数都是原始值则检查类型有一个是字符串则将另一个转换为字符串进行拼接否则转换为数值进行相加 ! 操作符
允许类型转换的宽松方式执行相等和不相等测试如果一个操作数是对象 另一个是原始值则使用无偏好算法转换为原始值 再比较 关系操作符
既可比较数值也可比较字符串如果有一个操作数是对象 则使用偏数值算法将对象转换为原始值与对象到数值转换不同 这个偏数值算法返回的原始值不会再被转换为数值