80

私は実際にjsであるnode.jsのプログラムに取り組んでいます。

私は変数を持っています:

var query = azure.TableQuery...

コードのこの行が実行されていないようです。

私の質問は:

次のような条件を実行するにはどうすればよいですか:

if this variable is defined do this.
else do this.

jsではできない(query!= null)

この変数が定義されているかどうかを確認したいのですが、何かをします。これを行う方法

4

7 に答える 7

120
if ( typeof query !== 'undefined' && query )
{
  //do stuff if query is defined and not null
}
else
{

}
于 2012-11-11T21:58:07.733 に答える
34

プロパティが存在するかどうかを判断します (ただし、偽の値ではありません)。

if (typeof query !== 'undefined' && query !== null){
   doStuff();
}

通常使用

if (query){
   doStuff();
}

十分なものです。その点に注意してください:

if (!query){
   doStuff();
}

doStuff() は、クエリが偽の値 (0、false、未定義、または null) を持つ既存の変数であった場合でも実行されます。

ところで、これを行うセクシーなコーヒースクリプトの方法があります:

if object?.property? then doStuff()

これは次のようにコンパイルされます:

if ((typeof object !== "undefined" && object !== null ? object.property : void 0) != null) 

{
  doStuff();
}
于 2012-11-11T22:14:58.657 に答える
25

私にとっては、

if (typeof query !== 'undefined' && query !== null){
   // do stuff
}

使用頻度に対して必要以上に複雑です。つまり、変数が定義されているかどうか、または null であるかどうかをテストすることは、私が頻繁に行うことです。私はそのようなテストを簡単にしたいと思っています。これを解決するために、最初に上記のコードを関数として定義しようとしましたが、ノードは構文エラーを返し、関数呼び出しのパラメーターが未定義であることを通知します。役に立たない!それで、このビットについて検索して作業したところ、解決策が見つかりました。おそらく誰にとってもそうではありません。私の解決策は、Sweet.jsを使用してマクロを定義することです。これが私がそれをした方法です:

マクロは次のとおりです (ファイル名: macro.sjs):

// I had to install sweet using:
// npm install --save-dev
// See: https://www.npmjs.com/package/sweetbuild
// Followed instructions from https://github.com/mozilla/sweet.js/wiki/node-loader

// Initially I just had "($x)" in the macro below. But this failed to match with 
// expressions such as "self.x. Adding the :expr qualifier cures things. See
// http://jlongster.com/Writing-Your-First-Sweet.js-Macro

macro isDefined {
  rule {
    ($x:expr)
  } => {
    (( typeof ($x) === 'undefined' || ($x) === null) ? false : true)
  }
}


// Seems the macros have to be exported
// https://github.com/mozilla/sweet.js/wiki/modules

export isDefined;

マクロの使用例を次に示します (example.sjs 内):

function Foobar() {
    var self = this;

    self.x = 10;

    console.log(isDefined(y)); // false
    console.log(isDefined(self.x)); // true
}

module.exports = Foobar;

メインノードファイルは次のとおりです。

var sweet = require('sweet.js');

// load all exported macros in `macros.sjs`
sweet.loadMacro('./macro.sjs');

// example.sjs uses macros that have been defined and exported in `macros.sjs`
var Foobar = require('./example.sjs');

var x = new Foobar();

これの欠点は、Sweet をインストールし、マクロをセットアップし、Sweet をコードにロードする必要があることを除けば、Node.js でのエラー報告が複雑になる可能性があることです。解析の 2 番目のレイヤーを追加します。まだこれだけの作業をしていないので、最初にどうなるか見てみましょう。私はSweetが好きですが、マクロが恋しいので、それを続けようと思います!

于 2015-12-05T08:28:05.160 に答える
7

変数が宣言も定義もされていない場合:

if ( typeof query !== 'undefined' ) { ... }

変数が宣言されているが未定義の場合。(ここでのケースでは、変数は定義されていない可能性がありますが、falseまたはのような他の偽の値である可能性があります""

if ( query ) { ... }

変数が宣言されているが、undefinedまたはである可能性がある場合null

if ( query != null ) { ... } // undefined == null
于 2012-11-11T22:05:32.457 に答える
3

簡単なタスクの場合、私はしばしば次のようにします。

var undef;

// Fails on undefined variables
if (query !== undef) {
    // variable is defined
} else {
    // else do this
}

または、単にヌル値もチェックしたい場合..

var undef;

// Fails on undefined variables
// And even fails on null values
if (query != undef) {
    // variable is defined and not null
} else {
    // else do this
}
于 2018-01-10T19:43:17.767 に答える
1

オブジェクトのプロパティ チェックを行っているようです。プロパティが存在することを確認したい場合 (ただし、真の値に加えて null や 0 などの値にすることもできます)、in演算子を使用すると、適切な構文を作成できます。

var foo = { bar: 1234, baz: null };
console.log("bar in foo:", "bar" in foo); // true
console.log("baz in foo:", "baz" in foo); // true
console.log("otherProp in foo:", "otherProp" in foo) // false
console.log("__proto__ in foo:", "__proto__" in foo) // true

ご覧のとおり、ここで__proto__プロパティがスローされます。これは、継承されたすべてのプロパティに当てはまります。さらに読むには、MDN ページをお勧めします。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in

于 2015-08-02T17:30:31.117 に答える