gpt4 book ai didi

javascript - 使用 "in"运算符搜索 toFixed - "in"运算符如何处理原语?

转载 作者:行者123 更新时间:2023-11-29 10:55:51 24 4
gpt4 key购买 nike

我开始阅读 YDKJS 是为了好玩 - 发现他写的是:

我们可以做这样的事情:

var num = (1.2).toFixed(1)

所以 - 这意味着 toFixed 被作为整数值的成员方法调用。

那么为什么这行不通呢??

"toFixed" in 1.222

但这行得通:

"toFixed" in new Number(1.222)

最佳答案

Es262 规范的第 268 页指出:

RelationalExpression : RelationalExpression in ShiftExpression

[...]

  1. Let rref be the result of evaluating ShiftExpression.

  2. Let rval be ? GetValue(rref).

  3. If Type(rval) is not Object, throw a TypeError exception.

换句话说:您不能在数字上使用 in。这就是它的定义方式。

然而,

new Number 并不创建数字,而是创建一个数字对象(一个继承自 Number.prototype 的对象)。这就是为什么你可以在它上面使用 in,因为它是一个实际的对象。


您仍然可以执行 12..toFixed(),那是因为规范中有一个非常有趣的结构:抽象的 GetValue 操作,当您访问属性¹,如果目标(在本例中为 12)不是对象,则调用 toObject,然后将执行以下操作:

Return a new Number object whose [[NumberData]] internal slot is set to argument.

换句话说:12..toFixed()new Number(12).toFixed() 完全相同

¹ 有趣的是,根据规范访问属性本身实际上并没有这样做,如果您执行 a.b 只会查找 a 的值并且创建一个引用(Reference(a, "b"))。实际的属性查找发生在 GetValue 被调用时(但是我不知道有没有引用在没有调用 GetValue 的情况下丢失)。

关于javascript - 使用 "in"运算符搜索 toFixed - "in"运算符如何处理原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576361/

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