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 */ |
号
那么,如果我有一个变量abc,我想知道它是否是一个字符串,我可以这样做。
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
} |
。
- 您真的在代码中使用new String()吗,或者这只是一个理论问题?
- 他可能不得不处理其他人的代码,只是想确保在没有读取(甚至没有访问)所有代码的情况下捕获所有String类型的代码。
- @泽克斯,这是一个理论问题。但是,如果两个程序员一起工作,一个使用"",另一个使用new String(),这可能是一个实际问题。
- @奥利奥:是的,这就是为什么我问你是否同时使用两者(或者其他人都使用),因为我个人不知道使用new String()的原因,并且好奇是否有,我只是不知道;—)
- jquery在检查传入参数的类型时只使用typeof s ==="string"。我怀疑这通常很好,因为很少有人从new String()显式地编码字符串对象。
- 绝对最简单的方法是清晰地记录API以需要原始字符串,然后只使用typeof。instanceof存在罕见但潜在的问题。
- 如果变量是字符串,则检查可能重复
- @tripleee这不是stackoverflow.com/questions/4059147/hellip;的副本。在那里,询问者没有说他也希望代码与new String()一起工作,只是说typeof myVar == 'string' || myVar instanceof String可以使用。我已经知道了,在这里我问是否有一个本地的和较短的方式来做这件事。
- 在javascript中检查变量是数字还是字符串的可能重复项
我认为Object.prototype.toString.call(a) ==="[object String]"是最短的/最本土化的方法
- (foo.constructor==string)不是更干净吗?这两种情况对我都适用,但我还没有测试过所有发动机
- 它不适合歌剧。
您可能会感到困惑,因为[]是一个数组初始化器(通常称为数组文字),定义为创建数组对象,而''是一个字符串文字,定义为创建字符串原语。
基元不是任何类型对象的实例,尽管为了方便起见,它可能被强制到相关对象。
更重要的问题是,为什么对于字符串原语和字符串对象,isString函数都应该返回true?字符串对象的使用是(非常?)很少见,我会认为他们的使用会推断出特殊的治疗方法,你会想区分这两种方法,而不是同样对待它们。
更常见的情况是忽略变量的类型,如果变量的类型可能不同,则无条件地将其转换为所需的类型,例如,如果需要字符串原语:
1 2 3 4
| function foo(s) {
s = String(s); // s is guaranteed to be a string primitive
...
} |
号
例外情况是,函数被重载,并且根据特定参数是函数、对象还是其他参数,具有不同的行为。这种重载通常被认为不是一个好主意,但许多JavaScript库都依赖于它。在这些情况下,传递字符串对象而不是字符串原语可能会产生意想不到的结果。
- 当我想到一个函数,它根据论点的类型做不同的事情时,我就想到了这个问题。
- 因此,现在您将沿着isFunction、isObject等功能的良好路径前进。:-)javascript的丢失类型意味着此类测试只能在有限的情况下工作,因此记录这些限制并继续进行。
你是对的:
1
| typeof myVar == 'string' || myVar instanceof String; |
是检查变量是否为字符串的最佳方法之一。