II0_0IIL 2022-05-13 09:18 采纳率: 87.5%
浏览 34
已结题

js运算符+和对象运算会怎样

function z(){
  var arr = [];
  var a = function(){ this.toString = function(){ return 9; };};
  arr[0] = new a();
  console.log(""+arr[0]);     //9
  console.log(arr[0]);          //a {toString: ƒ}
};
var w = new z();

为何前面有个""+ 就把里面的方法给执行了。两个console.log()的结果不应该是一样的吗

  • 写回答

3条回答 默认 最新

  • Rattenking Python领域优质创作者 2022-05-13 09:26
    关注

    ""+arr[0]这一句进行了隐式调用,就是会调用toString方法将arr[0]转字符串,你可以理解为""+arr[0].toString()!所以输出就是 ""+9="9"
    输出就是9

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    II0_0IIL 2022-05-13 12:08

    ""+ 这玩意会调用对象的方法???

    回复
    II0_0IIL 2022-05-13 12:19

    问题出在关键词toString上,
    function 函数(){
    this.toString = function(){ return 9; };
    };
    console.log(""+new 函数()); //9
    如果toString换成其他,显示的就是 [object Object]。但为啥会这样?

    回复
    Rattenking 回复 II0_0IIL 2022-05-13 13:27

    字符串+其他,这个其他会隐士调用toString方法,先将其他转字符串,在进行拼接。由于你这里自定义了toString方法,所以这个字符串+其他,其他就调用了你自定义的方法,你定义的方法返回的是9,所以最后拼接是9

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月15日
  • 创建了问题 5月13日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部