[勘误]-4-6 对象标签、对象序列化
4-6 对象标签、对象序列化 [未更新视频]
var obj = {x:1, y:2}; obj.toString = function(){return this.x + this.y;}; obj.valueOf = function(){return this.x + this.y + 100} "result" + obj; // 这里是result103,而不是result3
JavaScript中的二元+操作符,若操作数为对象,则尝试转换为基本类型。优先级是先找valueOf,再找toString。
注意到,若valueOf/toString返回的不是基本类型,而是对象,则会被忽略。
var obj = {x:1, y:2}; obj.toString = function(){return this.x + this.y;}; obj.valueOf = function(){return {x : 1}}; // 不可用的valueOf "result" + obj; // "result3", 因为valueOf无效,使用toString作为结果返回
若valueOf/toString均不可用,则报TypeError异常。
var obj = {x:1, y:2}; obj.toString = function(){return {};}; // 不可用的toString obj.valueOf = function(){return {x : 1}}; // 不可用的valueOf "result" + obj; // Uncaught TypeError: Cannot convert object to primitive value