Bosn
2015-01-29 05:22
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
感谢@穹海鸿鹰 网友提出此问题。
必须给32个赞,期待Bosn老师的更多分享!
一语中的
4-3 属性操作,17页中间的or 应该是 and
不错~
二的十次方个赞
赞一个
JavaScript深入浅出
281100 学习 · 1020 问题
相似问题