为了账号安全,请及时绑定邮箱和手机立即绑定

[勘误]-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


正在回答

7 回答

感谢@穹海鸿鹰 网友提出此问题。

5 回复 有任何疑惑可以回复我~

必须给32个赞,期待Bosn老师的更多分享!

0 回复 有任何疑惑可以回复我~

一语中的

0 回复 有任何疑惑可以回复我~

4-3 属性操作,17页中间的or 应该是 and

0 回复 有任何疑惑可以回复我~

不错~

0 回复 有任何疑惑可以回复我~

二的十次方个赞

0 回复 有任何疑惑可以回复我~

赞一个

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281112    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

[勘误]-4-6 对象标签、对象序列化

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信