0

私のコードが何をするかは明らかだと思います。

!==演算子を使用すると、コードが文字列全体を返すのはなぜですか? Javascript の配列は index から始まることを知っています。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 です。

4

3 に答える 3

2

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?
}
于 2013-10-07T17:25:33.530 に答える
1

簡単にするために、 indexOfが typeof number であるindexまたは-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');
于 2013-10-07T19:29:16.303 に答える