【发布时间】:2015-10-15 17:12:52
【问题描述】:
有区别吗?字符串 2 会继承不同的对象原型吗?
var s1 = 1234 + '';
var s2 = String(1234);
//s1.someNewFunc(); error?
//s2.someNewFunc();
谢谢
【问题讨论】:
标签: javascript
有区别吗?字符串 2 会继承不同的对象原型吗?
var s1 = 1234 + '';
var s2 = String(1234);
//s1.someNewFunc(); error?
//s2.someNewFunc();
谢谢
【问题讨论】:
标签: javascript
Javascript 允许您将原始值视为对象。它通过将原语动态强制转换为对象来实现。这就是为什么,即使原语没有属性,像这样的东西也很好:
"abcde".substr(1,3); //bcd
true.valueOf(); //true
【讨论】:
两者的行为方式相同。
此外,这里有一个关于字符串原语与对象的很好的解释:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String
字符串原语和字符串对象的区别
[...] 字符串文字(用双引号或单引号表示)和从非构造函数上下文中的 String 调用返回的字符串(即,不使用 new 关键字)是原始字符串。 JavaScript 自动将原语转换为 String 对象,因此可以将 String 对象方法用于原语字符串。 [...]
【讨论】:
var s1 = 1234 + '';
创建一个字符串文字。这是一个javascript语言原语。
var s2 = String(1234);
String() 函数还返回原始字符串文字。 s2 将具有与 s1 相同的成员,因为它们都是相同的类型。
然而
var s3 = new String("1234");
将创建一个 String 类型的对象,而不是原始字符串字面量。这确实有不同的成员并且是对象类型。
【讨论】:
new myObject(...)
同样的事情!
var s1 = 1234 + '';
var s2 = String(1234);
typeof s1 //string
typeof s2 //string
【讨论】: