0

拡張機能を検出し、拡張機能に基づいてアクションを実行しています。だから私の質問は、なぜこれがうまくいかないのかということです.十分に論理的だと思いますか?

var ext = url.split('.').pop().toLowerCase();
if (ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp') {
  This is a video (this always returns true...?)
} else if (ext == 'jpg' || 'jpeg' || 'gif' || 'png' || 'bmp') {
  This is a picture
} else {
  This extension isn't supported here
}

しかし、これはありますか?不必要なオーバーヘッド?

var ext = url.split('.').pop().toLowerCase();
if (ext == 'avi' || ext == 'mpg' || ext == 'mpeg' || ext == 'mp4') {
  This is a video
} else if (ext == 'jpg' || ext == 'jpeg' || ext == 'gif' || ext == 'png') {
  This is a picture
} else {
  This extension isn't supported here
}

変数を何度もヒットすることなく、例1のようにこれを機能させるために私が見逃している構文の問題はありますか? このリストは、拡張機能の量に関して描かれているものよりもはるかに大きく、すべてが完了したときに多くの不要なコードのように見えるため、懸念されています.

4

3 に答える 3

3

ext が true であるか、いずれかがtrueであるかを比較しているため、行ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'は常に true になります。avi'mpg' || 'mpeg' || 'mp4' || '3gp'

演算子は==、将来の参照のために単一の変数のみを比較します。

この比較を a で記述する別の方法switchは、次のとおりです。

switch(ext) {//switch with fall throughs
    case 'avi':
    case 'mpg':
    case 'mpeg':
    case 'mp4':
        //we got a video
        break;
    case 'jpg':
    case 'jpeg':
    case 'gif':
    case 'png':
        //its a picture
        break;
    default:
        //this extension isn't suupported
}
于 2013-11-03T00:48:08.910 に答える
1

「だから私の質問は、なぜこれがうまくいかないのかということです」

それは||オペレーターがすることではないからです。

あなたのコンセプトを実装するために私が考えることができる最短の構文は、各条件に対して正規表現テストを使用することです:

if (/^(avi|mpg|mpeg|mp4|3gp)$/.test(ext)) {

または、配列を使用できます。

if (['avi', 'mpg', 'mpeg', 'mp4', '3gp'].indexOf(ext) != -1) {

(IE<=8 について心配していない、またはshim$.inArray()を使用している、または の代わりにjQueryを使用していると仮定します.indexOf()。)

switchまたは、これはステートメントを使用する明らかな場所のようです。

var ext = url.split('.').pop().toLowerCase();
switch(ext) {
    case 'avi':
    case 'mpg':
    case 'mpeg':
    case 'mp4':
    case '3gp':
       //  This is a video (this always returns true...?)
       break;
    case 'jpg':
    case 'jpeg':
    case 'gif':
    case 'png':
    case 'bmp':
       // This is a picture
       break;
    default:
       //  This extension isn't supported here
       break;
}
于 2013-11-03T00:49:48.467 に答える
1

最初のif条件は常に真実です。

チェックする値がたくさんある場合は、次のようなものをお勧めします

var video = ['avi', 'mpg'];
var audio = ['mpg', 'mpeg'];
if($.inArray(ext, video)){
    //video
} if($.inArray(ext, audio)){
    //audio
} else {
}
于 2013-11-03T00:50:49.910 に答える