直到最近,我还没有意识到JavaScript中有两种类型的字符串(和bool和数字):诸如的原语"blah"和诸如的对象new String("blah").
它们以非常"陷阱"的方式不同,其中最大的方式似乎是不同的typeof值("string"vs "object"),但存在许多其他差异,其中一些记录在MDN.
创建String对象没有意义,因为原始字符串也可以正常工作,JSHint甚至将此视为错误.所以我真的想假装String实例甚至不存在,并且只支持我的代码中的原始字符串.
这让我想知道:我可以通过调用一些返回字符串的标准API来获得一个惊喜的String实例吗?或者是否真的可以安全地假设,除非有人通过明确写作搞砸了,否则new String我永远不会看到其中的一个?
这个 github 搜索显示有些人正在使用new String.
这个答案对 String obj 有一个很好的解释:
返回字符串的原生 JavaScript 对象、主要库或 DOM 方法都不会返回 String 对象而不是字符串值。但是,如果您想绝对确定您有一个字符串值而不是 String 对象,您可以按如下方式转换它:
Run Code Online (Sandbox Code Playgroud)var str = new String("foo"); str = "" + str;