【问题标题】:Difference in these 2 Strings (JavaScript)这两个字符串的区别(JavaScript)
【发布时间】:2020-12-25 12:35:57
【问题描述】:

我试图用 2 种方式创建 字符串数据类型变量

  1. 作为字符串文字
  2. 使用新关键字

但在我看来,这两者在 console.log 上的表现形式不同。 有人可以告诉我第二种方式是不返回字符串还是有所不同?

var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);

预期:

abc,定义

输出:

【问题讨论】:

  • 看看MDN docs,看看“例子”——但是,构造函数会产生一个String类型的实例(一个对象包装器)
  • @ggorlen - 你能用你自己的话解释一下,并创建一个答案。有 4 或 5 个答案,但没有一个让我满意,如下所示。你是前辈,我觉得你可以解释一下。

标签: javascript html


【解决方案1】:

JavaScript 有两个主要的类型类别,原始类型和对象。

typeof new String(); // "object"
typeof '';           // "string"

对于将原始值分配给变量的语句,例如:

var str1 = "Hi";

JavaScript 将在内部使用以下方法创建变量:

String("Hi")

使用 new 关键字的工作方式不同,而是返回一个对象。

【讨论】:

    【解决方案2】:

    当您打印一个对象时,控制台通常会打印该对象的属性。

    如果是原语,控制台只打印该值。

    原语没有装箱,但如果您使用构造函数创建字符串,则该字符串被装箱在对象中并且始终具有属性。

    如果只是一个文字,它只有在您使用 . 运算符访问字符串的属性时才具有属性,因为会发生装箱,但在那之后,它仍然是一个没有额外添加的文字,因为当您打印 @ 987654322@,只打印值,仅此而已。原始字面量并不总是具有属性的对象,只有装箱时才是对象。

    【讨论】:

      【解决方案3】:

      String 对象让您可以处理一系列字符;它用许多辅助方法包装了 Javascript 的字符串原始数据类型。

      由于 JavaScript 会自动在字符串原语和 String 对象之间进行转换,因此您可以在字符串原语上调用 String 对象的任何辅助方法。

      【讨论】:

        【解决方案4】:

        您正在处理两种不同的事情。 var str1 = "abc" 给你一个原始的。 而var str2 = new String("def"); 为您提供了一个字符串对象。 这两种类型的行为不同

        【讨论】:

          【解决方案5】:

          调用 new String(something) 会生成一个 String 实例对象。

          console.log() 的结果看起来是一样的,因为它只会从您传递给它的 String 实例中提取原始字符串。

          所以:只是普通的 String() 返回一个字符串原语。 new String('xyz') 返回由 String 构造函数构造的对象。

          很少需要显式构造 String 实例。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-18
            • 1970-01-01
            • 2013-07-28
            • 1970-01-01
            相关资源
            最近更新 更多