可能重复:
为什么有两种JavaScript字符串?
例如,new RegExp()如果我们需要动态计算正则表达式,我们需要使用而不是正则表达式文字.
然而,当任何人需要使用String/Number/Boolean对象而不是原始版本时,究竟是什么边缘情况?(因为我似乎无法想到一个需要它的地方)
AString是一个Object,但存在原始版本,它是作为文字创建的'Hello'(并且是迄今为止最常用的)。
人们有时会使用new String()将另一种类型转换为 a String,例如在函数中。
function leadingZero(number, padding) {
number = new String(number);
...
}
Run Code Online (Sandbox Code Playgroud)
前导 0 在 a 中并不重要Number,因此它必须是 a String。
然而,我仍然更愿意通过将 a 与空( ) 连接起来来制作Numbera 。StringString''
function leadingZero(number, padding) {
number += '';
...
}
Run Code Online (Sandbox Code Playgroud)
这将隐式调用 的toString(),Number返回一个String原语。
我读到人们说嘿
typeof foo==="string"不是万无一失的,因为如果使用创建字符串new String将给typeof我们object。
你可以像这样制定一个万无一失的isString()方法......
var isString = function(str) {
return Object.prototype.toString.call(str) == '[object String]';
}
Run Code Online (Sandbox Code Playgroud)
这适用于多window环境。您还可以检查该 constructor 属性,但这在多window环境中会失败。
另请参阅Felix Kling对此答案的评论。