javascript中的new String('a') 和 'a'

79 阅读1分钟

new String('a') 和 'a'

在 JavaScript 中,当你使用 new String('a') 创建一个字符串时,你实际上是在创建一个字符串对象。而当你直接使用 'a' 时,你是在创建一个字符串原始值。

装箱

装箱是一个概念,通常用于描述原始数据类型(如字符串、数字等)与它们的对象形式(如 String、Number 等)之间的转换。在 JavaScript 中,当你在需要对象的地方使用原始值时,JavaScript 会自动将原始值装箱,即创建一个临时的对象。

对于你的例子,当你在需要对象的地方使用 'a' 时,JavaScript 会自动将 'a' 装箱为一个临时的 String 对象。但是,使用 new String('a') 创建的就是一个明确的字符串对象,不会发生自动装箱。

以下是两种情况的简单示例代码:

// 直接使用 'a',JavaScript 自动装箱
var s1 = 'a'; // s1 是一个原始字符串
var s2 = new String('a'); // s2 是一个 String 对象
 
// 使用原始字符串的方法,它会在内部被装箱
s1.length; // 1,自动装箱,调用原始字符串的属性
 
// 使用对象字符串的方法,它不会自动装箱
s2.length; // 1,不会自动装箱,调用对象的属性

在第一种情况中,当我们尝试获取 s1.length 时,JavaScript 内部会将 'a' 视为一个原始字符串,并在访问属性时自动进行装箱。

在第二种情况中,s2 是一个明确创建的 String 对象,当我们直接调用 s2.length 时,不会发生自动装箱,因为对象已经存在,我们直接访问它的属性。