【发布时间】:2015-12-30 08:43:18
【问题描述】:
我尝试理解{} == true 文档Ecma-262 的7.2.12 部分之后的表达式。
- 如果 Type(y) 为 Boolean,则返回比较结果
x == ToNumber(y)
ToNumber(true)的结果是1,那么
{} == 1
- 如果 Type(x) 是 Object 并且 Type(y) 是字符串、数字或符号,则 返回比较结果
ToPrimitive(x) == y。
我现在对ToPrimitive({}) 感到困惑。
如果提示是“字符串”,那么
一个。让 methodNames 为 «"toString", "valueOf"»。
否则,
一个。让 methodNames 为 «"valueOf", "toString"»。
应该将ToPrimitive({}) 解释为{}.toString() 还是{}.valueOf()?
假设调用了toString()。
如果 Type(x) 是 String 并且 Type(y) 是 Number, 返回比较结果
ToNumber(x) == y
所以{} == true 可能是ToNumber(ToPrimitive({})) == ToNumber(true)?
【问题讨论】:
-
methodNames列表是优先级列表 -
“谁能提供更多细节”听起来太宽泛了。你想知道什么?
-
@Bergi 我从“Dmitri Pavlutin”的回答中得到了一些细节。你是对的,我会更新我的问题。
-
提供的两个答案都是正确的,并且相辅相成。正如您所说的两个问题,Felix Kling 更好地回答:
Should ToPrimitive({}) be interpreted as {}.toString() or {}.valueOf()?;和 Dmitri Pavlutin 更好的答案:So {} == true could be ToNumber(ToPrimitive({})) == ToNumber(true)?.
标签: javascript