检测字符串

要检测参数是否是原始字符串,请使用 typeof

var aString = "my string";
var anInt = 5;
var anObj = {};
typeof aString === "string";   // true
typeof anInt === "string";     // false
typeof anObj === "string";     // false

如果你有一个 String 对象,通过 new String("somestr"),那么上面的代码将不起作用。在这种情况下,我们可以使用 instanceof

var aStringObj = new String("my string");
aStringObj instanceof String;    // true

要涵盖这两个实例,我们可以编写一个简单的辅助函数:

var isString = function(value) {
    return typeof value === "string" || value instanceof String;
};

var aString = "Primitive String";
var aStringObj = new String("String Object");
isString(aString); // true
isString(aStringObj); // true
isString({}); // false
isString(5); // false

或者我们可以利用 ObjecttoString 功能。如果我们必须在 switch 语句中检查其他类型,这可能很有用,因为此方法支持其他数据类型,就像 typeof 一样。

var pString = "Primitive String";
var oString = new String("Object Form of String");
Object.prototype.toString.call(pString);//"[object String]"
Object.prototype.toString.call(oString);//"[object String]"    

更强大的解决方案是根本不检测字符串,而只检查所需的功能。例如:

var aString = "Primitive String";
// Generic check for a substring method
if(aString.substring) {

}
// Explicit check for the String substring prototype method
if(aString.substring === String.prototype.substring) {
    aString.substring(0, );
}