[英]Comparison operators !== against 0
我認為代碼很明顯是做什么的。
如果使用!==
運算符,為什么我的代碼返回整個字符串? 我知道Javascript中的數組從索引0
開始,在這里我輸入整個文件名作為參數,因此indexOf(".")
將始終大於0
。 不,我沒有在此處傳遞.htaccess文件。
function getFileExtension(i) {
// return the file extension (with no period) if it has one, otherwise false
if(i.indexOf(".") !== 0) { //
return i.slice(i.indexOf(".") + 1, i.length);
} else {
return false;
}
}
// here we go! Given a filename in a string (like 'test.jpg'),
getFileExtension('pictureofmepdf'); return given string
// both operand are same type and value
但是如果我將比較更改為
(i.indexOf(".") > 0) // logs false
PS我案件你問,這是形式usvsth3m。
indexOf()
返回子字符串的索引,因此它可以返回0
,這意味着子字符串出現在位置0
。 如果未找到子字符串,則返回-1
,因此更改您的if
語句以反映此邏輯:
if(i.indexOf(".") >= 0)
另外,您應該使用substring()
從字符串中提取子字符串slice()
用於數組。
return i.substring(i.indexOf(".") + 1, i.length);
不過,我認為更好的方法是使用split()
:
var fileNameArray = i.split("."); // "foo.txt" --> ["foo" "txt"]
if(fileNameArray.length >= 2) {
return fileNameArray[1];
} else {
return false; //maybe you want to return "" instead?
}
String方法indexOf
返回(如果找到的話)您搜索的字符串的第一個索引,並且請記住,index可以為零,這就是為什么您必須進行嚴格比較以檢查indexOf
是否未返回布爾值false的原因 。
在這種情況下,我建議您使用lastIndexOf
,因為一個名為something.min.js
的文件將返回min.js
作為有效的擴展名,而不是。
好吧,為簡化起見,我忽略了indexOf返回為typeof number或-1的 索引 ,如果找不到給定值,則不返回布爾值FALSE。 因此,在將-1與0比較的情況下,結果為true,這就是為什么我實際上得到給定字符串輸出,而不是false的原因。 好吧, MDN現在在我的書簽欄中
var z = -1;
console.log(z >= 0); // evaluates false because -1 < 0
console.log(z !== 0); // evaluates true because -1 !== 0
// also if z > 0 it is !== 0, but could be < 0
所以下一個代碼就像一個魅力。
function getFileExtension(i) {
// i will be a string, but it may not have a file extension.
// return the file extension (with no period) if it has one, otherwise false
if(i.indexOf(".") >= 0) {
return i.substring(i.indexOf(".") + 1, i.length);
} else {
return false;
}
}
getFileExtension('pictureofmepdf');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.