gpt4 book ai didi

javascript - 为什么JS在给数字添加对象时会调用 `toString`方法

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:12 28 4
gpt4 key购买 nike

我知道当 JS 试图将对象表示为原始对象时,它会调用对象的 valueOf 方法。但是今天我发现它在同样的情况下也调用了toString()方法:

var o = {};
o.toString = function() {return 1};
1+ o; // 2

为什么?如果我添加 valueOf 方法,则不会调用 toString

最佳答案

我想解释在 ECMA-262 specification 的 8.6.2.6 章中。 :

8.6.2.6 [DefaultValue]

[...]

当使用提示数字调用O的[[DefaultValue]]方法时,执行以下步骤:

  1. 使用参数“valueOf”调用对象 O 的 [[Get]] 方法。

  2. 如果 Result(1) 不是对象,转到步骤 5。

  3. 调用 Result(1) 的 [[Call]] 方法,以 O 作为 this 值和一个空参数列表。
  4. 如果 Result(3) 是原始值,则返回 Result(3)。

  5. 使用参数“toString”调用对象 O 的 [[Get]] 方法。

  6. 如果 Result(5) 不是一个对象,转到第 9 步。

  7. 调用 Result(5) 的 [[Call]] 方法,以 O 作为 this 值和一个空参数列表。
  8. 如果 Result(7) 是原始值,则返回 Result(7)。
  9. 产生一个运行时错误。当在没有提示的情况下调用 O 的 [[DefaultValue]] 方法时,它的行为就好像提示是 Number,除非 O 是 Date 对象(参见第 15.9 节),在这种情况下,它的行为就好像提示是 String。

由于您的对象没有实现 valueOf,因此使用了 toString。

关于javascript - 为什么JS在给数字添加对象时会调用 `toString`方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com