JavaScript 数据类型和数据结构

您所在的位置:网站首页 数据类型int JavaScript 数据类型和数据结构

JavaScript 数据类型和数据结构

2023-04-22 02:55| 来源: 网络整理| 查看: 265

在期望原始值的地方使用原始强制过程,但对实际类型应该是什么没有强烈的偏好。 在期望原始值的地方使用强制原始值转换的过程,但对实际的类型并不是什么特殊的要求。这通常是当 字符串、数值或 BigInt 相同可以接受的时候。

Date() 构造函数,当它收到一个不是 Date 实例的参数时——字符串表示日期字符串,而数值表示时间戳。 + 运算符——如果运算对象是字符串,执行字符串串联;否则,执行数值相加。 == 运算符——如果一个运算对象是原始值,而另一个运算对象是对象(object),则该对象将转换为没有首选类型的原始值。

如果值已经是原始值,则此操作不会进行任何转换。对象按以下顺序调用它的 [@@toPrimitive]()(将 hint 作为 default)、valueOf() 和 toString() 方法,将其转换为原始值。注意,原始值转换会在 toString() 方法之前调用 valueOf() 方法,这与强制数字类型转换的行为相似,但与强制字符串类型转换不同。

[@@toPrimitive]() 方法,如果存在,则必须返回原始值——返回对象,会导致 TypeError。对于 valueOf() 和 toString(),如果其中一个返回对象,则忽略其返回值,从而使用另一个的返回值;如果两者都不存在,或者两者都没有返回一个原始值,则抛出 TypeError。例如,以下代码:

console.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]() 将 "default" hint 视为 "string",而 Symbol.prototype[@@toPrimitive]() 忽略 hint 并始终返回一个 symbol。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3