zhe*_*oli 7 javascript tostring
根据Javascript the Definitive Guide第6版中的3.8.3节:
要将对象转换为字符串,JavaScript将执行以下步骤:
•如果对象具有toString()方法,则JavaScript会调用它.如果它返回原始值,JavaScript会将该值转换为字符串(如果它不是字符串)并返回该转换的结果.请注意,表3-2中的原始到字符串转换都已明确定义.•如果对象没有
toString()方法,或者该方法没有返回原始值,则JavaScript会查找valueOf()方法.如果方法存在,JavaScript会调用它.如果返回值是基元,则JavaScript会将该值转换为字符串(如果尚未存在)并返回转换后的值.•否则,JavaScript不能获得,无论是从原始值
toString()或valueOf(),所以它抛出一个TypeError.
例如:
var obj = {
toString: function() {
console.log('toStirng...');
return 90;
},
valueOf: function() {
console.log('valueOf...');
return 80;
}
}
console.log(obj + '');
Run Code Online (Sandbox Code Playgroud)
因此,上面的代码片段会obj因为而转换为字符串obj + '',所以它应该打印:
toString...
90
Run Code Online (Sandbox Code Playgroud)
但实际上,它打印:
valueOf...
80
Run Code Online (Sandbox Code Playgroud)
那有什么不对?不obj + ''转换obj为字符串?