检查变量是不是为字符串的简单方法?

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 对象而不是字符串原语可能会产生意想不到的后果。

【讨论】:

当我想到一个根据参数类型执行不同操作的函数时,我想到了这个问题。 所以现在你走上了 isFunctionisObject 等函数的老路。 :-) Javascript 的丢失类型意味着此类测试只能在有限的情况下工作,因此请记录限制并继续前进。

以上是关于检查变量是不是为字符串的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

检查变量是不是在python中定义的简单方法? [复制]

检查字符串是不是包含C中另一个字符串的简单方法? [复制]

检查变量是不是为空字符串或空字符串的更好方法?

使用 PHP 检查多个值是不是为整数的最简单方法是啥?

C#中检查硬盘是不是为SSD而不在硬盘上写入任何文件的最简单方法是啥?

检查PHP数组是不是不为空的最简单方法[关闭]