JavaScript 数据类型和数据结构 |
您所在的位置:网站首页 › object类型数组 › JavaScript 数据类型和数据结构 |
原始值强制转换用于得到一个期望的原始值,但对实际类型应该是什么并没有强烈的偏好。通常情况下可以接受字符串、数值或 BigInt。例如: Date() 构造函数,当它收到一个不是 Date 实例的参数时——字符串表示日期字符串,而数值表示时间戳。 + 运算符——如果运算对象是字符串,执行字符串串联;否则,执行数值相加。 == 运算符——如果一个运算对象是原始值,而另一个运算对象是对象(object),则该对象将转换为没有首选类型的原始值。如果值已经是原始值,则此操作不会进行任何转换。对象将依次调用它的 [@@toPrimitive]()(将 default 作为 hint 值)、valueOf() 和 toString() 方法,将其转换为原始值。注意,原始值转换会在 toString() 方法之前调用 valueOf() 方法,这与数字类型强制转换的行为相似,但与字符串类型强制转换不同。 [@@toPrimitive]() 方法,如果存在,则必须返回原始值——返回对象,会导致 TypeError。对于 valueOf() 和 toString(),如果其中一个返回对象,则忽略其返回值,从而使用另一个的返回值;如果两者都不存在,或者两者都没有返回一个原始值,则抛出 TypeError。例如,以下代码: jsconsole.log({} + []); // "[object Object]"{} 和 [] 都没有 [@@toPrimitive]() 方法。{} 和 [] 都从 Object.prototype.valueOf 继承 valueOf(),其返回对象自身。因为返回值是一个对象,因此它被忽略。因此,调用 toString() 方法。{}.toString() 返回 "[object Object]",而 [].toString() 返回 "",因此这个结果是它们的串联:"[object Object]"。 在强制转换为任意的原始类型时,[@@toPrimitive]() 方法总是优先调用。原始值的强制转换的行为通常与 number 类型的强制转换类似,因为优先调用了 valueOf();然而,有着自定义 [@@toPrimitive]() 方法的对象可以选择返回任意的原始值。Date 和 Symbol 对象是唯一重写 [@@toPrimitive]() 方法的对象。Date.prototype[@@toPrimitive]() 将 "string" 视为 "default" hint,而 Symbol.prototype[@@toPrimitive]() 忽略 hint 并始终返回一个 symbol。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |