JavaScript 中的对象可以通过调用 ToPrimitive
转换成原始值。当 JavaScript 引擎需要将一个对象转换为原始值时,会先调用这个对象的 valueOf
方法,如果返回值不是原始值,再去调用对象的 toString
方法。如果这两个方法都不能返回原始值,那么会抛出一个 TypeError
异常。
具体而言,ToPrimitive
函数具有以下操作步骤:
- 如果原始值为 Symbol 类型,直接返回原始值;
- 如果对象具有 valueOf 方法且其返回值为原始值,则返回该原始值;
- 否则,如果对象具有 toString 方法且其返回值为原始值,则返回该原始值;
- 否则,抛出一个 TypeError 异常。
下面看两个示例:
示例一
var obj = {
valueOf: function() {
return 100;
},
toString: function() {
return '200';
}
};
console.log(obj + 50); // 150
在这个示例中,首先会调用对象的 valueOf
方法,由于 valueOf
方法返回的是原始值 100,因此直接将其作为加法运算的操作数,最终结果为 150。
示例二
var obj = {
toString: function() {
return 'hello';
}
};
console.log('msg:' + obj); // msg:hello
console.log(`msg:${obj}`); // msg:hello
在这个示例中,由于对象的 valueOf
方法未定义,因此会直接调用对象的 toString
方法,返回的原始值为字符串 'hello'。最终结果为 'msg:hello'。
需要注意的是,在进行加法运算时,如果其中一个操作数为字符串类型,则会将另一个操作数也转换为字符串类型,而不是数字类型。因此,在示例二中,${obj}
实际上就是将对象转换为了字符串类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析JavaScript对象转换成原始值 - Python技术站