创建字符串对象有什么不同

时间:2014-02-13 07:31:13

标签: javascript

创建像这样的字符串对象

之间有什么区别
var txt = new String("Hello World");

和这个

var txt = "Heloo World";

9 个答案:

答案 0 :(得分:3)

首先让我们破坏一些神话。字符串文字不是语法糖。

> var txt = new String("Hello World");
> typeof x
"string"
> var txt2 = "Hello World";
> typeof txt2
"object"

正如你所看到的,这两件事是不同类型的。甚至更多:其中一个是对象,第二个不是。这有一个实际的后果,如:

> new String("Hello World") == new String("Hello World")
false
> "Hello World" == "Hello World"
true

另一个区别是原语通过值传递,而对象通过引用传递。如果你传递许多大字符串,这可能会节省一些内存。然而,对象和文字都是不可变的,所以它真的不是一个大问题(如果你不打算修改它们,为什么你会传递很多大字符串呢?)。

此外,您可以向对象添加属性,但不能将它们添加到基本类型。但这并非100%正确。您可以将属性添加到基元的原型中。请注意,文字和对象都具有相同的原型

> String.prototype.test = 11;
> var x = new String("x");
> x.test;
11
> var y = "x":
> y.test;
11

答案 1 :(得分:1)

由新String(“foo”)创建的String对象几乎没有实际用途。 String对象相对于原始字符串值的唯一优势是作为对象,它可以存储属性:

var str = "foo";
str.prop = "bar";
alert(str.prop); // undefined

var str = new String("foo");
str.prop = "bar";
alert(str.prop); // "bar"

希望这会有所帮助..

答案 2 :(得分:1)

String构造函数返回String类型的对象。通常,您需要一个文字字符串值,因为严格地将对象与文字进行比较将始终返回false。

答案 3 :(得分:1)

一个是字符串基元,另一个是String对象。 String对象优先于字符串原语的优点是它可以存储属性

var x = "foobar"
x.y = "hello"
console.log(x.hello) /* Undefinded*/

var z = new String("foobar")
z.y = "hello"
console.log(z.y) /* hello*/

typeof x = "string"
typeof z = object.

x==z //true
x===z // false

答案 4 :(得分:1)

没什么,但要注意这一点,

var s = new String('A');
var s1 = String('A');
var s2 = 'A';


console.log(s === 'A');//fasle -- since type is Object
console.log(s1 === 'A');//true
console.log(s2 === 'A');//true

答案 5 :(得分:0)

第一个返回一个String对象,第二个返回一个字符串。

typeof txt; //object
typeof txt2; //string

虽然它们可能表现相似,但txt !== txt2

答案 6 :(得分:0)

var txt = "Heloo World";

这里'txt'是原始数据类型。它没有方法,只不过是指向原始数据存储器引用的指针,这解释了随机访问速度更快的速度。

var txt = new String("Hello World");

如果您使用new,则明确声明您要创建Object的实例。因此,新的String正在生成一个包装String原语的Object,这意味着对它的任何操作都涉及额外的工作层。

答案 7 :(得分:0)

原始数据类型是:

  • 字符串
  • 布尔

如果您使用:

var txt = "Heloo World";

这是基本类型数据类型alert(typeof txt);将为您提供字符串类型。

在JavaScript中,所有变量都可以是对象类型,对于每个基元,它们都是Object类型。

var txt = new String("Heloo World");

这里typeof会给你一个对象。

有关差异,请参阅jsfiddle

var str="text"; 
alert(typeof str);     //string

var str2="text";
alert(str === str2);   //true

str = new String("text changed");
alert(typeof str);     //object

var str2 = new String("text changed");
alert(str === str2);   //false

答案 8 :(得分:-1)

没什么,真的。在第一个示例中,您调用类String的构造函数,并将字符串的主体作为参数放置,如第二个示例中所示,它在解释阶段自动完成。

所以基本上第二个是syntactic sugar,其中第一个不是。{/ p>

功能上存在差异。