【发布时间】:2014-03-11 22:53:02
【问题描述】:
这样创建字符串对象有什么区别
var txt = new String("Hello World");
还有这个
var txt = "Heloo World";
【问题讨论】:
标签: javascript
这样创建字符串对象有什么区别
var txt = new String("Hello World");
还有这个
var txt = "Heloo World";
【问题讨论】:
标签: javascript
原始数据类型有:
如果您使用:
var txt = "Heloo World";
这是原始类型数据类型alert(typeof txt); 会给你字符串类型。
在 JavaScript 中,所有变量都可以是对象类型,对于每个基元,它们都是对象类型。
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
【讨论】:
undefined 和 null 是另外两种原始数据类型。
A primitive value is a member of one of the following built-in types: Undefined, Null, Boolean, Number, and String
首先让我们打破一些神话。字符串文字不是语法糖。
> 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
【讨论】:
第一个返回一个String对象,第二个返回一个字符串。
typeof txt; //object
typeof txt2; //string
虽然他们的行为可能相似,但txt !== txt2
【讨论】:
String.prototype。
"foo" instanceof String == false
String.prototype 的方法。除了"test".__proto__ == String.prototype.
String.prototype.isPrototypeOf("") == false.
不过要小心这个,
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
【讨论】:
由 new 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"
希望这会有所帮助..
【讨论】:
var txt = "Heloo World";
这里的“txt”是一种原始数据类型。它没有方法,只不过是一个指向原始数据内存引用的指针,这解释了随机访问速度要快得多。
var txt = new String("Hello World");
如果您使用 new,则表示您要创建一个 Object 的实例。因此,new String 正在生成一个包装 String 原语的 Object,这意味着对它的任何操作都涉及额外的工作层。
【讨论】:
String 具有相同的原型。尝试向String.prototype 添加任何方法,您会发现它也可以在文字字符串中使用。所以唯一的区别是第一个是对象,第二个不是。
"x".test = 1 根本不起作用(它至少应该抛出一个异常恕我直言,而不仅仅是静默失败)。
一个是字符串原语,另一个是字符串对象。 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
【讨论】:
String 构造函数返回一个 String 类型的对象。通常,您需要一个文字字符串值,因为严格比较一个对象与文字总是会返回 false。
【讨论】:
没什么,真的。在第一个示例中,您调用类String 的构造函数并将字符串的主体作为参数,在第二个示例中,它在解释阶段自动完成。
所以基本上第二个是syntactic sugar,而第一个不是。
在功能上没有区别。
【讨论】:
String的构造函数?)。查看其他人的答案。