我下面一個教程,建議檢查的對象是字符串,而不是空的,如下:檢查如果對象是字符串在Javascript
var s = "text here";
if (s && s.charAt && s.charAt(0))
有人說,如果s是字符串,那麼它有charAt方法,然後最後一個組件將檢查字符串是否爲空。
我試着用一些SO questions和here和here too !!
有相似(typeof
和instanceof
)其他可用的方法來測試它,所以我決定測試它的js斌:jsbin code here如下:
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-爲什麼instanceof
檢查失敗?
'如果(string2.charAt)'只檢查方法是否定義,空字符串仍然是一個字符串,所以將返回true – charlietfl
@charlietfl plz引用adeneo的答案,他說:「一個簡單的字符串不是一個對象,它是一個主要的數據類型,並且沒有原型,與用新String創建的String對象相反。「 – stackunderflow
所以空字符串定義爲文字不會返回true如果檢查charAt函數的存在 – stackunderflow