是否有任何标准JavaScript API或库将字符串作为String对象返回?

Do any standard JavaScript APIs or libraries return strings as String objects?

直到最近,我才意识到在javascript中有两种类型的字符串(以及bools和number):原语(如EDOCX1)(0)和对象(如EDOCX1)(1)。

它们在非常容易"抓住"的方式上存在差异,其中最大的一个似乎是不同的typeof值("string""object"),但也存在许多其他差异,有些差异在MDN中有记载。

创建字符串对象是没有意义的,因为基本字符串也能正常工作,JShint甚至将其视为一个错误。所以我想假装字符串实例根本不存在,只支持我的代码中的原始字符串。

这让我想知道:我可以通过调用一些返回字符串的标准API来获得一个意外的字符串实例吗?或者,如果没有人明确地写下new String,我就不会看到其中的一个,这真的安全吗?


这个Github搜索显示有些人正在使用new String

这个答案对字符串obj有一个很好的解释:

No native JavaScript object, major library or DOM method that returns
a string will return a String object rather than a string value.
However, if you want to be absolutely sure you have a string value
rather than a String object, you can convert it as follows:

1
2
var str = new String("foo");
str ="" + str;


我不知道任何只使用原始字符串的约定。还有越来越多的API可供使用,我非常肯定时不时会有人使用构造函数技巧。我想就如何快速发现这一点给出一些调试建议,但我认为typeof检查是快速注意差异的唯一明显方法。

您可以使用这样的支票,尽管我认为不值得麻烦:

1
2
3
4
5
6
7
function isString(string){
     return typeof myVar == 'string' || myVar instanceof String;
};

isString("foo");             //returns true
isString(new String("bar")); //returns true
isString({});                //returns false;

结论:恐怕你只需要祈祷你不会遇到这些古怪的角落箱子。