gpt4 book ai didi

javascript - 为什么数字文字无法访问 Number 方法?

转载 作者:行者123 更新时间:2023-12-02 22:52:44 25 4
gpt4 key购买 nike

如果您查看 ECMAScript 3 规范,您会发现原始值类型 Null 和 Undefined 没有伴随的 Null 和 Undefined 对象。

>> Null
ReferenceError: Null is not defined

其他原始值类型 Number、String 和 Boolean 类型确实具有随附的 Number、String 和 Boolean 对象,您可以从全局范围引用它们。

>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }

这些原始值类型的目的是提供诸如toString之类的方法和valueOf对于它们各自的原始值类型:

>>var n = 1;
>>n.toString();
"1"

相同
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"

bool 值和字符串也可以这样工作:

>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"

当您尝试混合类型时,您可以看到原始值对象正在使用其伴随对象的方法:

>>Boolean.prototype.toString.call(n); 
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic

有趣的是,对于 bool 和字符串文字类型,您可以直接从文字调用这些方法:

>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"

原始值 null 和 undefined,因为它们没有伴随的 Null 和 Undefined 对象,因此无法执行以下操作:

>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method 'toString' of null

原始值类型 number 的行为类似于两者的混合。您可以调用toString如果直接使用 Number 的原型(prototype)对象的方法,则在文字上:

>>Number.prototype.toString.call(1);
"1"

但是您无法像使用字符串和 bool 值一样从文字本身访问该方法:

>>1.toString()
SyntaxError: Unexpected token ILLEGAL

即使存在 Number 对象,为什么数字文字的行为与 bool 值和字符串不同?

最佳答案

可以以相同的方式访问它,这是一个不同的解析问题,为此,请使用稍微不同的语法:

(1).toString()

数字可以有小数,所以当你去解析代码时,以小数结尾的语法有点不明确,使用括号才有效。当您看到这也是有效的时,就更清楚了:

(1.).toString()

但是,仅使用1.toString(),它会尝试解析为带小数的数字,但失败了。

关于javascript - 为什么数字文字无法访问 Number 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046342/

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