javascript – 下面提到的两个语句之间的区别

前端之家收集整理的这篇文章主要介绍了javascript – 下面提到的两个语句之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题在下面举例说明
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

这里有1号和2号之间有什么区别?为什么输出不一样?

解决方法

这个说法:
var myString = new String('foo');

…创建一个用字符f,o和o初始化的字符串对象.

这个说法:

var myString = new String();

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

myString = "foo";

…将该字符串对象抛出,并用这些字符替换一个新的原始字符串的变量的值.最终结果与以下内容完全相同:

var myString = "foo";

console.log输出的不同之处在于提供console.log的浏览器正在尝试清楚其中的一个是一个对象,另一个是原语.

有点混乱,JavaScript有两个字符串对象和字符串原语. (它也有数字对象和数字原语.)几乎没有任何理由使用新的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?

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

原文链接:https://www.f2er.com/js/152241.html

猜你在找的JavaScript相关文章