簡體   English   中英

比較運算符!==反對0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM