可能重复:
Why are there two kinds of JavaScript strings?什么是任何框架或任何人会需要使用String/Number/Boolean对象而不是原始版本的原因?
例如,我们需要,如果我们需要被动态地计算正则表达式表达式中使用的new RegExp()
代替正则表达式字面。
但是到底什么是边界情况当任何人需要使用字符串/数字/布尔对象而不是他们的原始版本? (因为我似乎无法甚至认为一个在哪里它永远需要)
可能重复:
Why are there two kinds of JavaScript strings?什么是任何框架或任何人会需要使用String/Number/Boolean对象而不是原始版本的原因?
例如,我们需要,如果我们需要被动态地计算正则表达式表达式中使用的new RegExp()
代替正则表达式字面。
但是到底什么是边界情况当任何人需要使用字符串/数字/布尔对象而不是他们的原始版本? (因为我似乎无法甚至认为一个在哪里它永远需要)
一个String
是Object
,但原始的版本存在,这是作为一个文字创造了'Hello'
(并且是目前最常见的用过的)。
例如,在一个函数中,人们有时使用new String()
将另一种类型转换为String
。
function leadingZero(number, padding) {
number = new String(number);
...
}
前导零不在一个Number
显著,所以它必须是一个String
。
但是,我仍然希望将Number
一个String
连接到一个空的String
(''
)。
function leadingZero(number, padding) {
number += '';
...
}
这将隐式调用Number
的toString()
,返回String
原始。
我读别人说哎
typeof foo==="string"
不是傻瓜证明,因为如果使用new String
创建的字符串typeof
会给我们object
。
你可以做一个傻瓜证明像这样isString()
方法...
var isString = function(str) {
return Object.prototype.toString.call(str) == '[object String]';
}
这适用于多window
环境。您还可以检查constructor
属性,但在多个window
环境中失败。
另请参阅Felix Kling对此解答的评论。
无论如何,我投了票,因为这是一个很好的问题。 –
我能想到的一个原因是为特定的字符串实例添加一个新的属性(无论出于何种原因)。你必须用'new String'创建这个字符串。 –