1
var userinput = prompt("Hello. Please enter a statement and I will repeat the last word");
if(typeof userinput !== "string"){
console.log("This is not a string.");
}

私はまったくの初心者で、入力したステートメントの最後の単語を繰り返す簡単なスクリプトを作成しようとしていました。このセーフガードを追加して、文字列を入力しないとメッセージが表示されるようにしましたが、コードを数字でテストするときはいつでも、この部分を無視して、最後を見つけるコードであるelseステートメントを実行します語。なぜこのセーフガードが機能しないのか理解できません。

助けていただければ幸いです。ありがとう

4

7 に答える 7

3

prompt()無条件に文字列を返すため(または null)。入力されたものを解析しようとせず、「ああ、ねえ、それはすべて数字です。代わりに返すだけですint」。つまり、テストは基本的に無意味です...文字列以外は何も返されないため、コードは常に「else」パスを取ります。

関連ドキュメント: https://developer.mozilla.org/en-US/docs/Web/API/window.prompt

于 2013-07-05T15:56:18.367 に答える
0

あなたはそれが何をすることを期待していますか?

prompt()常に文字列を返すためuserinput、ユーザーが何を入力しても、常に文字列になります。何も入力しない場合、空白の文字列になりますが、文字列のままです。数値を入力すると、たまたま数字を含む文字列になります。

したがって、typeofチェックは常に失敗します。

彼らが何かを入力したかどうかを確認したい場合は、空白以外の値があるかどうかを確認できます。

if(!userinput) {
     //user didn't enter anything.
}
于 2013-07-05T16:00:09.820 に答える
0

"123"まだ文字列です。

prompt文字列または null を返します。入力する文字は問いません。

于 2013-07-05T15:56:26.423 に答える
0

プロンプトは文字列を返します。その文字列はそうかもしれません"2"が、それでも文字列です。

次のような正規表現でテストできます。

var reg = /^\d+$/;
if(reg.test(userinput)){
    console.log("This is a number.");
 }

数値かどうかを調べる

于 2013-07-05T15:57:45.570 に答える
0

ユーザー入力から受け取ったものはすべて、最初は文字列です。やりたいことは、入力を何らかの数値に変換できるかどうかをテストすることです。

于 2013-07-05T15:57:54.427 に答える
0

prompt()を使用すると、常に文字列が返されます。したがって、必要なのは、それが数値でもあるかどうかをテストすることです。

if(typeof userinput === "number") {
    console.log("This is also a number.");
} else {
    // only string
}

isNan()または、 「Not a Number」をチェックするために使用することもできます。

于 2013-07-05T16:01:19.393 に答える