check if an object is string in Javascript
我遵循一个建议检查对象是否为字符串而不是空的教程,如下所示:
1 2 | var s ="text here"; if ( s && s.charAt && s.charAt(0)) |
据说,如果s是字符串,那么它有一个方法charat,然后最后一个组件将检查字符串是否为空。
我试着用其他可用的方法来测试它,比如(
所以我决定在js bin:jsbin代码中测试它,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | var string1 ="text here"; var string2 =""; alert("string1 is" + typeof string1); alert("string2 is" + typeof string2); //part1- this will succeed and show it is string if(string1 && string1.charAt){ alert("part1- string1 is string"); }else{ alert("part1- string1 is not string"); } //part2- this will show that it is not string if(string2 && string2.charAt ){ alert("part2- string2 is string"); }else{ alert("part2- string2 is not string"); } //part3 a - this also fails !! if(string2 instanceof String){ alert("part3a- string2 is really a string"); }else{ alert("part3a- failed instanceof check !!"); } //part3 b- this also fails !! //i tested to write the String with small 's' => string // but then no alert will excute !! if(string2 instanceof string){ alert("part3b- string2 is really a string"); }else{ alert("part3b- failed instanceof check !!"); } |
号
现在我的问题是:
1-使用
2-为什么EDOCX1[1]检查失败??
字符串值不是字符串对象(这就是InstanceOf失败的原因)2。
为了使用"类型检查"覆盖这两种情况,它将是
本教程假设[只有]字符串对象(或被提升的字符串值1)有一个
教程代码还接受一个字符串"0",而
1对于string、number和boolean的原语值,分别有一个对应的对象类型string、number和boolean。当
空值或未定义值都没有相应的对象(或方法)。函数已经是对象,但有一个历史上不同的有用的
2有关不同类型的值,请参见ES5:8-类型。字符串类型,例如,表示一个字符串值。
1- Why does the check for string fails when the string is empty using the string2.charAt?
号
由于第一个条件失败,以下表达式的计算结果为false:
1 2 | var string2 =""; if (string2 && string2.charAt) { console.log("doesn't output"); } |
第二行基本上等于:
1 | if (false && true) { console.log("doesn't output"); } |
号
例如:
1 2 | if (string2) { console.log("this doesn't output since string2 == false"); } if (string2.charAt) { console.log('this outputs'); } |
2- Why does the instanceof check fail?
号
这失败了,因为在javascript中,字符串可以是文本或对象。例如:
1 2 | var myString = new String("asdf"); myString instanceof String; // true |
。
然而:
1 2 | var myLiteralString ="asdf"; myLiteralString instanceof String; // false |
通过检查类型和
1 | str instanceof String || typeof str ==="string"; |
。