上面描述的是 String 类型的转换,很多时候也会发生 Number 类型的转换:
调用 Number() 函数,强制进行 Number 类型转换
调用 Math.sqrt() 这类参数需要 Number 类型的方法
obj == 1 ,进行对比的时候
obj + 1 , 进行运算的时候
与 String 类型转换相似,但是 Number 类型刚好反过来,先查询自身的 valueOf 方法,再查询自己 toString 方法:
1.如果 valueOf 存在,且返回原始类型数据,返回 valueOf 的结果。
2.如果 toString 存在,且返回原始类型数据,返回 toString 的结果。
3.其他情况,抛出错误。
按照上述步骤,分别尝试一下:
var obj = {
valueOf: function() {
console.log(‘调用 valueOf’);
return 5;
}
}
console.log(obj + 1);
// 调用 valueOf
// 6
var obj = {
valueOf: function() {
console.log(‘调用 valueOf’);
return {};
},
toString: function() {
console.log(‘调用 toString’);
return 10;
}
}
console.log(obj + 1);
// 调用 valueOf
// 调用 toString
// 11
var obj = {
valueOf: function() {
console.log(‘调用 valueOf’);
return {};
},
toString: function() {
console.log(‘调用 toString’);
return {};
}
}
console.log(obj + 1);
// 调用 valueOf
// 调用 toString
// Uncaught TypeError: Cannot convert object to primitive value
转载请注明来源网站:blog.ytso.com谢谢!
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/14955.html