检查变量是不是为字符串的简单方法?
Posted
技术标签:
【中文标题】检查变量是不是为字符串的简单方法?【英文标题】:Easy way to check if a variable is a string?检查变量是否为字符串的简单方法? 【发布时间】:2012-08-28 14:31:46 【问题描述】:这个问题是[] is an instance of Array but "" isn't of String的衍生问题
鉴于此
"" 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
【问题讨论】:
您真的在代码中使用new String()
还是只是一个理论问题?
他可能不得不处理其他人的代码,只是想确保在不阅读(甚至无法访问)所有代码的情况下捕获所有 String
类型。
@zerkms 这是一个理论问题。但如果两个程序员一起工作,一个使用""
,另一个使用new String()
,这可能是一个实际问题。
jQuery 在检查传入参数的类型时只使用typeof s === "string"
。我怀疑这通常可以正常工作,因为很少有人从new String()
显式编码字符串对象。
Check if a variable is a string的可能重复
【参考方案1】:
我认为Object.prototype.toString.call(a) === "[object String]"
是最短/最原始的方法
【讨论】:
( foo.constructor == String ) 会不会更干净?这两种情况似乎都对我有用,但我还没有在所有引擎中测试过【参考方案2】:你是对的:
typeof myVar == 'string' || myVar instanceof String;
是best ways 之一,用于检查变量是否为字符串。
【讨论】:
【参考方案3】:您可能会感到困惑,因为[]
是一个array initialiser(通常称为数组字面量),它被定义为创建一个数组对象,而''
是一个string literal,即定义为创建一个字符串primitive。
原语不是任何类型对象的实例,尽管为方便起见,它可能被强制转换为相关对象。
一个更重要的问题是为什么isString
函数应该对字符串原语和字符串对象都返回true?字符串对象的使用(非常?)很少见,我原以为它们的使用会推断出特殊处理,并且您会想要区分两者而不是一视同仁。
忽略变量的类型更为常见,如果它的类型可能不同,则无条件地将其转换为所需的类型,例如如果你想要一个字符串原语:
function foo(s)
s = String(s); // s is guaranteed to be a string primitive
...
例外情况是函数被重载并且根据特定参数是函数、对象还是其他什么而具有不同的行为。这种重载通常不被认为是一个好主意,但许多 javascript 库都依赖于它。在这些情况下,传递 String 对象而不是字符串原语可能会产生意想不到的后果。
【讨论】:
当我想到一个根据参数类型执行不同操作的函数时,我想到了这个问题。 所以现在你走上了isFunction
、isObject
等函数的老路。 :-) Javascript 的丢失类型意味着此类测试只能在有限的情况下工作,因此请记录限制并继续前进。以上是关于检查变量是不是为字符串的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章