5

一般的に、変数が次のように設定されているかどうかをテストします。

if (variable !== '') {

   do something...

}

のような変数をテストする他の方法があることは知ってtypeofいますが、利点はわかりません-これは、変数が設定されているかどうかをテストするための適切な方法ですか?知っておくべき問題はありますか?

4

5 に答える 5

22

2つの理由:

1)空の入力ボックスの内容を取得して変数を設定した場合はどうなりますか?

if(someScenario){
    var variable = $('empty-box').val(); }

おそらく、これは、someScenariotrueの場合など、特定の場合にのみ実行されます。後で、その変数が設定されているかどうかを確認します。あなたの手段はtrueではなくfalseを返します。ポイントは、間違った答えが出るシナリオを思いつくことができるということです。

受け入れられた方法でそれをし ない理由はありません。

if(typeof variable !== 'undefined')

それは遅くはなく、本当の欠陥はなく、ほんの数文字多いだけです。

2)そして最も重要なことは、使用typeofすることであなたが何を求めているのかが完全に明確になることです。読みやすさは非常に重要であり、別のプログラマーが最初のコードを読んだ場合、それが空の文字列ではないことを確認していると思われます。を使用typeofする方法は、条件が何を探しているかを完全に明確にし、後で間違いの可能性を減らします。

于 2012-08-19T21:21:17.940 に答える
3

variable宣言されているが値がない可能性がある場合、コードは次のようになります。

if (variable !== '') {

空の文字列でないかどうかをテストします。それはあなたが望むものですか?空の文字列が有効な値である可能性があります。をテストするか、明示的に初期化して、「無効」(おそらく、または適切なもの)undefinedとして扱うことができる値に初期化することをお勧めします。null

variableがまったく宣言されていない場合、上記のコードはエラーになり、その時点で実行が停止します。存在しない変数の値をテストすることはできません。したがって、たとえば、まだ呼び出されていない可能性のある関数内で作成されたグローバル変数をテストしようとしている場合、または複数のJSファイルを使用していて、そうでない可能性のある変数をテストする必要がある場合他のファイルの1つによって作成されている場合、それを行う唯一の方法は次の方法です。

if (typeof variable != "undefined") {
于 2012-08-19T21:42:14.913 に答える
2

厳密な等式テストを使用しているため、以下はすべてtrueを返します。

  • false
  • 未定義
  • ヌル
  • 0

チェックが返さfalseれるのは、空の文字列を渡したときだけです。
それはあなたが望むものですか?

于 2012-08-19T21:21:07.483 に答える
2

このページの「TheExistentialOperator」を検索して、coffeescriptの実存的演算子を確認してください:http://coffeescript.org/

このアプローチの機能上の問題は、スクリプトの前のある時点で誤って空白の文字列を変数に割り当て、ロジックブロックが間違ったことを実行する可能性があることです。

文体の観点からは、変数の存在を確認する意図が明確でないため、ソリューションはあまり望ましくありません。初めてコードを読んだばかりの人は、「この変数が存在しない場合は何かをする」ではなく、「変数という名前の変数が空白の文字列に設定されていることを期待しています」という意味を誤解する可能性があります。 。」

于 2012-08-19T21:46:04.803 に答える
0

これは非常に主観的かもしれませんが、変数が設定されているかどうか(aotに何らかの値またはタイプがあるかどうか)をチェックする必要があるコードを避けることをお勧めします。

このスニペットを検討してください

var a=false;
if (some_condition) a="Blah";
if (typeof(a)=='string') ....
if (a===false) ...

これにより、、、またはとa簡単に区別できるようにしながら、常に設定されます。''null0

于 2012-08-19T21:24:27.413 に答える