gpt4 book ai didi

javascript - 一个空字符串加上一个对象如何等于一个数字

转载 作者:行者123 更新时间:2023-11-30 08:30:22 24 4
gpt4 key购买 nike

v = {
toString: function () { return 'foo' },
valueOf: function () { return 5 }
}
console.log('' + v); //5
console.log(v); // { [Number: 5] toString: [Function], valueOf: [Function] }

为什么v对象会得到5的值?

最佳答案

您正在创建一个对象 v,并覆盖其 valueOf() 方法以返回整数 5。如果对象没有明确的 valueOf () 方法定义,然后 valueOf() 返回对象本身。 JavaScript 中的所有内置核心对象都会覆盖此方法以返回适当的值。例如,执行以下操作:

x = 5;
console.log(x)

真正在做的是:

console.log(x.valueOf()) // log the return value of x.valueOf()

您可以在此处阅读有关 valueOf() 的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf


如果您询问为什么加法 (+) 运算符返回算术加法(调用 v.valueOf())而不是串联,您需要引用 ECAMScript 规范以获得答案。 Section 11.6.1谈论加法运算符。这是相关的位:

  1. Let lprim be ToPrimitive(lval).
  2. Let rprim be ToPrimitive(rval).
  3. If Type(lprim) is String or Type(rprim) is String, then Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)
  4. Return the result of applying the addition operation to ToNumber(lprim) and ToNumber(rprim).

看起来应该在数字类型之前将操作数解析为字符串类型,因此您的表达式 ''+v 应该首先调用 v.toString(),因此返回 foo,对吧?

实际上,没有。因为在第 5 步和第 6 步中,两个操作数都首先解析为它们的基元,并且这种解析是在没有“提示”的情况下完成的。当没有提示传递给 ToPrimitive 时,对象返回它们的默认值,即 valueOf() 方法的返回值。参见 9.1 部分了解对象如何解析为其基元。

关于javascript - 一个空字符串加上一个对象如何等于一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937118/

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