直到最近,我还没有意识到JavaScript中有两种类型的字符串(和bool和数字):"blah"
等基元和new String("blah")
等对象。< / p>
他们的方式各不相同,其中最大的方式似乎是typeof
值"string"
与"object"
不同,但是存在许多其他差异,一些documented at MDN。
创建String对象没有意义,因为原始字符串也可以正常工作,JSHint even treats this as an error。所以我真的很想假装String实例甚至不存在,只支持我代码中的原始字符串。
这让我想知道:我可以通过调用一些返回字符串的标准API来获得一个惊喜的String实例吗?或者是否真的可以安全地假设除非有人通过明确写new String
来搞砸,否则我永远不会看到其中的一个?
答案 0 :(得分:2)
This github search表示有些人正在使用new String
。
this answer对String obj有一个很好的解释:
没有返回的本机JavaScript对象,主要库或DOM方法 字符串将返回String对象而不是字符串值。 但是,如果您想绝对确定您有字符串值 而不是String对象,您可以按如下方式转换它:
var str = new String("foo"); str = "" + str;
答案 1 :(得分:1)
我不知道任何只使用原始字符串的约定。还有越来越多的API可供使用,而且我非常肯定每个人都会不时地使用构造函数技巧。我想提供一些关于如何发现这个快速的调试建议,但我认为typeof
检查是快速记录差异的唯一明显方法。
你可以使用像this answer这样的支票,虽然我觉得这不值得麻烦:
function isString(string){
return typeof myVar == 'string' || myVar instanceof String;
};
isString("foo"); //returns true
isString(new String("bar")); //returns true
isString({}); //returns false;
结论:我担心你必须祈祷你不会遇到 这些古怪的角落案件。