0

私は JavaScript を初めて使用しますがtrue、結果が得られ続けるため、何か間違ったことをしたことを知っています。誰かが私の間違いを指摘できますか?前もって感謝します。

function checkForVowel(x){
   if(x == "a", "e", "i", "o", "u"){
       document.write("true");
   }else{
       document.write("false");
   }
}

checkForVowel("n");
4

3 に答える 3

11

JavaScript の比較演算子は魔法ではありません。各比較を個別に行う必要があります。論理 OR を使用して、「これらのいずれか」を確認できます||

if(x == "a" || x == "e" || x == "i" || x == "o" || x == "u")

または、1 文字の文字列が多いので、 を利用できますindexOf。しかし、あなたが始めたばかりなら、上記は理解しやすいかもしれません。

if(x.length === 1 && 'aeiou'.indexOf(x) > -1)

あなたが真実になり続ける理由については、それ,は実際にはJavaScriptの演算子であり、主に人々を混乱させるために発明されたものです1。左辺を評価し、次に右辺を評価し、右辺を返します。したがって、式は次のように要約されます。

if(x == "a", "e", "i", "o", "u")
if("e", "i", "o", "u")
if("i", "o", "u")
if("o", "u")
if("u")

これは真の値です。

1実際にはありません。

于 2012-06-07T01:26:24.213 に答える
2

多くのコードを使用するよりも、データ構造に対してテストする方がコードがはるかにクリーンな場合がありif/elseます。どちらが速いかは、特定のブラウザ エンジンと、比較対象の数によって異なります。これは、文字列が母音の文字列に存在するかどうかを確認します。

var vowels = "aeiou";

function checkForVowel(x) {
    return(vowels.indexOf(x.toLowerCase()) >= 0);
}

これは、テスト文字がここでは必要のない JavaScript オブジェクトにあるかどうかをテストしますが、何かがセットにあるかどうかをテストする別の興味深い方法です。

var vowels = {a: true, e: true, i: true, o: true, u: true};

function checkForVowel(x) {
    return(x.toLowerCase() in vowels);
}
于 2012-06-07T01:31:30.323 に答える
1

理由はわかりませんが、誰もこれを提案しませんでした。:/

function checkForVowel(x){
    document.write(/[aeiou]/i.test(x));   //Clearly this is even simpler than
}                                         // other methods.

または

function checkForVowel(x){
   if(x.search(/[aeiou]/i) != -1){
       document.write("true");
   }else{
       document.write("false");
   }
}
于 2012-06-07T01:59:03.853 に答える