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()的结果不应该是一样的吗

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

""+ 是转字符串


function z() {
  var arr = []; // 给变量arr赋值空数组
  var a = function () { // 在a函数中设置toString方法返回值为9
    this.toString = function () {
      return 9;
    };
  };
  arr[0] = new a(); // arr[0]作为a的实例
  console.log("" + arr[0]); //"" + arr[0]相当于arr[0].toString 所以返回值 9
  console.log(arr[0]); //a {toString: ƒ}
}
var w = new z();