检查变量是否为字符串的简便方法?

Ori*_*iol 5 javascript string

这个问题是[]的一个衍生产品,是Array的一个实例,但""不是String的实例

鉴于

"" instanceof String; /* false */
String() instanceof String; /* false */
new String() instanceof String; /* true */
Run Code Online (Sandbox Code Playgroud)

typeof "" === "string"; /* true */
typeof String() === "string"; /* true */
typeof new String() === "string"; /* false */
Run Code Online (Sandbox Code Playgroud)

然后,如果我有一个变量abc,我想知道它是否是一个字符串,我可以做

if(typeof abc === "string" || abc instanceof String){
    // do something
}
Run Code Online (Sandbox Code Playgroud)

有没有更简单,更短和本地的方式,或者我必须创建自己的功能?

function isStr(s){
    return typeof s === "string" || s instanceof String;
}
if(isStr(abc)){
    // do something
}
Run Code Online (Sandbox Code Playgroud)

jba*_*sas 7

我认为这Object.prototype.toString.call(a) === "[object String]"是最短/最本地的做法