简单的方法来检查一个变量是否是一个字符串?
这个问题是分拆的[]是数组的一个实例,但是“”不是字符串
鉴于
"" instanceof String; /* false */
String() instanceof String; /* false */
new String() instanceof String; /* true */
和
typeof "" === "string"; /* true */
typeof String() === "string"; /* true */
typeof new String() === "string"; /* false */
然后,如果我有一个变量abc
,我想知道它是否是一个字符串,我可以
if(typeof abc === "string" || abc instanceof String){
// do something
}
有没有更简单,更简单和原生的方式来做到这一点,还是我必须创建自己的功能?
function isStr(s){
return typeof s === "string" || s instanceof String;
}
if(isStr(abc)){
// do something
}
我认为Object.prototype.toString.call(a) === "[object String]"
是这样做的最短/最原始的方式
你是对的:
typeof myVar == 'string' || myVar instanceof String;
是检查变量是否为字符串的最佳方法之一。
您可能会感到困惑,因为[]
是一个数组初始值(通常称为数组文本),它定义为创建一个数组对象 ,而''
是定义为创建字符串基元的字符串文字。
基元不是任何类型的对象的实例,尽管为了方便起见它可以被强制为相关的对象。
更重要的问题是为什么isString
函数应该为字符串基元和字符串对象返回true? 字符串对象的使用是非常罕见的,我会认为它们的使用会推断出特殊的处理方式,并且你会想区分这两者,而不是对待它们。
忽略变量的类型更为常见,并且在类型可能不同的情况下,无条件地将其转换为所需的类型,例如,如果您需要字符串基元:
function foo(s) {
s = String(s); // s is guaranteed to be a string primitive
...
}
例外情况是函数被重载并且具有不同的行为,取决于特定的参数是函数,对象还是其他。 这样的重载通常不被认为是一个好主意,但是很多JavaScript库都依赖于它。 在这些情况下,传递一个String对象而不是一个字符串原语可能会产生意想不到的后果
链接地址: http://www.djcxy.com/p/94977.html