JavaScript中的valueOf方法详解
Object.prototype.valueOf()valueOf() 方法返回指定对象的原始值。语法object.valueOf()返回值返回值为该对象的原始值。描述JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身。通常由JavaScript内部调用,而不是在代码中显式调用。当遇到要预期的原始值的对象时,JavaScript会自动调
Object.prototype.valueOf()
valueOf() 方法返回指定对象的原始值。
语法
object.valueOf()
返回值
返回值为该对象的原始值。
描述
-
JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身。通常由JavaScript内部调用,而不是在代码中显式调用。当遇到要预期的原始值的对象时,JavaScript会自动调用它。
-
默认情况下,valueOf方法由Object后面的每个对象继承。 每个内置的核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则valueOf将返回对象本身。
-
JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。
不同类型对象的valueOf()方法的返回值
对象 | 返回值 |
---|---|
Array | 返回数组对象本身。 |
Boolean | 布尔值。 |
Date | 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。 |
Function | 函数本身。 |
Number | 数字值。 |
Object | 对象本身。这是默认情况。 |
String | 字符串值。 |
Math 和 Error 对象没有 valueOf 方法。 |
覆盖自定义对象的 valueOf方法
可以创建一个取代 valueOf方法的函数,该方法不能传入参数。
MyNumberType.prototype.valueOf = function() {
return customPrimitiveValue
}
有了这样的一个方法,下一次每当MyNumberType要被转换为原始类型值时,JavaScript 在此之前会自动调用自定义的valueOf方法。
valueOf方法一般都会被 JavaScript 自动调用,但也可以像下面代码那样自己调用:
myNumberType.valueOf()
Symbol.toPrimitive
对象的Symbol.toPrimitive属性,指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值。
Symbol.toPrimitive(hint)方法作用同valueOf()一样,但是优先级要高于valueOf()。
Symbol.toPrimitive被调用时,会接受一个字符串参数,表示当前运算的模式,一共有三种模式。
- number:该场合需要转成数值
- string:该场合需要转成字符串
- default:该场合可以转成数值,也可以转成字符串
let obj = {
[Symbol.toPrimitive](hint) {
switch (hint) {
case 'number':
return 123;
case 'string':
return 'str';
case 'default':
return 'default';
default:
throw new Error();
}
}
};
2 * obj // 246
3 + obj // '3default'
obj == 'default' // true
String(obj) // 'str'
参考文档
更多推荐
所有评论(0)