gpt4 book ai didi

javascript - 字符串对象和原始字符串之间的区别

转载 作者:数据小太阳 更新时间:2023-10-29 04:03:43 26 4
gpt4 key购买 nike

下面用例子描述了我的问题数字 1:

 var myString = new String('foo');

如果我使用 console.log(myString);输出是 String { 0="f", 1="o", 2="o"}

和数字 2:

var myString = new String();
myString = "foo";

此处 console.log(mystring); 仅打印 foo

这里 number-1 和 number-2 有什么区别?为什么输出不同?

最佳答案

这个声明:

var myString = new String('foo');

...创建一个字符串对象,用字符foo 初始化。

这个声明:

var myString = new String();

...创建一个没有字符的字符串对象,但这并不重要,因为这个语句:

myString = "foo";

...丢弃该字符串对象并用包含这些字符的新原始 字符串替换该变量的值。最终结果与以下内容完全相同:

var myString = "foo";

console.log 的输出不同的原因是提供 console.log 的浏览器试图明确其中一个是对象并且另一个是原始的。

有点令人困惑的是,JavaScript 同时具有字符串对象 和字符串基元。 (它也有数字对象和数字原语。)几乎没有任何理由使用 new String,它创建一个字符串对象;只需使用原语(在您的情况下为文字)即可。相反,有很好的理由使用字符串对象,例如:

console.log(new String("foo") === new String("foo")); // "false"
console.log(new String("foo") == new String("foo")); // "false"
console.log("foo" === "foo"); // "true"

因为字符串对象是对象,===== 比较的是对象引用,而不是字符序列。虽然在某些边缘情况下这就是您想要的,但在 99.9% 的情况下,您真正​​想要的是比较这些值。好消息是:

console.log("foo" == new String("foo")); // "true"

...但是如果您使用 === 就不是这样了,它不执行任何类型强制转换。


你可能会问:

So if var myString = "foo" returns a primitive, not an object, how is it that myString.toUpperCase() and such work?

好问题:答案是原语会自动提升为对象,以便我们可以进行函数调用。 (理论上;在实践中,实现比这更聪明。)

关于javascript - 字符串对象和原始字符串之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353973/

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