gpt4 book ai didi

javascript - 为什么使用 new 运算符调用时 Javascript 全局对象不同

转载 作者:行者123 更新时间:2023-11-29 18:22:00 25 4
gpt4 key购买 nike

在很多网站上,我读到过这两个是不同的:

var s1 = String('s1');     // typeof s1 == 'string'
var s2 = new String('s2'); // typeof s2 == 'object'

这同样适用于 bool 值、数字等。

但是,我没有找到任何有用的信息来说明为什么这两种构造会产生不同类型的对象。有什么具体原因吗?在某些情况下我会同时利用这两种方法吗?

最佳答案

var s1 = String('s1');

调用函数 String 返回一个字符串原语。

var s2 = new String('s2');

调用 String 作为返回对象的构造函数,该对象是 String 的实例。

String 知道何时在非构造函数上下文中调用它。该语言的创建者特意决定在这种情况下不返回对象。

我能想到的第一个示例的唯一有用目的是类型转换,例如 String(4),它创建 '4'。但还有其他方法可以实现这一目标。

第二个例子似乎没有很好的用例。当代码需要原语时,直接创建包装器对象甚至是有害的。例如:

var s2 = new String('s2');
doSomethingUseful(s2);

function doSomethingUseful(aParameter) {
if (typeof aParameter === 'string') { //s2 isn't

关于javascript - 为什么使用 new 运算符调用时 Javascript 全局对象不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611308/

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