与toString方法不一致?

时间:2018-03-05 18:19:22

标签: javascript

var o = {
  valueOf: function () {
    return 1;
  },
  toString: function () {
    return 'haha, intercepted';
  }
};

如果我继续并且记录a对象,那将意味着o.toString(),(让我得到对象的字符串表示)意义,它将更早地找到该方法(在它自己的对象中)将记录haha, intercepted

console.log(o); // Object { toString: toString() }

但它会自动记录对象。无论如何管理找到正确的方法。那不一致是什么?

此外,如果我去执行添加操作,它将按照应用于对象valueOf的{​​{1}}方法的方式工作。试图找到该对象的原始值,以便它可以添加1,但是我设法通过手动设置它来欺骗它。

o

1 个答案:

答案 0 :(得分:0)

这是console.log()的预期行为。当您传递一个对象时,它会打印出对象本身。它没有使用toString()因为这会阻止它打印出它想要做的对象。您可以在MDN上详细了解其行为。

如果您想强制它使用toString(),请将其o.toString()传递给它:



var o = {
  valueOf: function () {
    return 1;
  },
  toString: function () {
    return 'haha, intercepted';
  }
};
console.log(o.toString());