typeof 5 'number' ...然而,当通过 this 访问时,typeof 5 是不一样的: > N-6ren">
gpt4 book ai didi

javascript - typeof 为 "object"返回 `this` ,其他地方为 "number"

转载 作者:行者123 更新时间:2023-11-29 09:52:13 27 4
gpt4 key购买 nike

typeof 在不同上下文中应用于相同值时会计算出不同的字符串。例如,这是预期的:

> typeof 5
'number'

...然而,当通过 this 访问时,typeof 5 是不一样的:

> Number.prototype.foo = function () { return typeof this; };
[Function]
> (5).foo()
'object'

只是另一个(in)健全性检查,真正、认真地验证this 一个数字:

> Number.prototype.foo = function () { return [this + 1, typeof this]; };
[Function]
> (5).foo()
[ 6, 'object' ]

我已经通读了 MDN 文档和 ECMAScript spec对于 typeof,并且无法想象这是如何预期的,没关系正确。有人有解释吗?

最佳答案

这里的技巧是您的测试用例将 5 更改为一个对象。

每当您访问原始值( bool 值、数字或字符串)的属性时,原始值都会转换为适当类型( bool 值、数字或字符串)的对象,并且在该对象上解析属性访问。

我已经写了更多关于这个主题的文章 herehere

显示类型的正确方法是:

Number.prototype.foo = function () { return typeof this.valueOf(); };
(5).foo() // "number"

当您执行 this+1 时,您的完整性检查会将对象包装器转换回原始值:

(new Number(5)) + 1 // 6

关于javascript - typeof 为 "object"返回 `this` ,其他地方为 "number",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636028/

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