什么原因是任何框架或任何人需要使用String/Number/Boolean对象而不是原始版本?

Pac*_*ier 9 javascript

可能重复:
为什么有两种JavaScript字符串?

例如,new RegExp()如果我们需要动态计算正则表达式,我们需要使用而不是正则表达式文字.

然而,当任何人需要使用String/Number/Boolean对象而不是原始版本时,究竟是什么边缘情况?(因为我似乎无法想到一个需要它的地方)

ale*_*lex 1

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)

js小提琴

这适用于多window环境。您还可以检查该 constructor 属性,但这在多window环境中会失败。

另请参阅Felix Kling对此答案的评论。