Easy way to check if a variable is a string?
此问题是对以下项的派生:[]是数组的实例,但"不是字符串"
鉴于此
1 2 3 | "" instanceof String; /* false */ String() instanceof String; /* false */ new String() instanceof String; /* true */ |
和
1 2 3 | typeof"" ==="string"; /* true */ typeof String() ==="string"; /* true */ typeof new String() ==="string"; /* false */ |
号
那么,如果我有一个变量
1 2 3 | if(typeof abc ==="string" || abc instanceof String){ // do something } |
有没有一种更简单、更简短、更本土化的方法,或者我必须创建自己的函数?
1 2 3 4 5 6 | function isStr(s){ return typeof s ==="string" || s instanceof String; } if(isStr(abc)){ // do something } |
。
我认为
您可能会感到困惑,因为
基元不是任何类型对象的实例,尽管为了方便起见,它可能被强制到相关对象。
更重要的问题是,为什么对于字符串原语和字符串对象,
更常见的情况是忽略变量的类型,如果变量的类型可能不同,则无条件地将其转换为所需的类型,例如,如果需要字符串原语:
1 2 3 4 | function foo(s) { s = String(s); // s is guaranteed to be a string primitive ... } |
号
例外情况是,函数被重载,并且根据特定参数是函数、对象还是其他参数,具有不同的行为。这种重载通常被认为不是一个好主意,但许多JavaScript库都依赖于它。在这些情况下,传递字符串对象而不是字符串原语可能会产生意想不到的结果。
你是对的:
1 | typeof myVar == 'string' || myVar instanceof String; |
是检查变量是否为字符串的最佳方法之一。