webentwicklung-frage-antwort-db.com.de

Wie kann ich überprüfen, ob eine Variable in Node.js definiert ist?

Ich arbeite an einem Programm in node.js, das eigentlich js ist.

Ich habe eine Variable:

var query = Azure.TableQuery...

sieht aus, dass diese Codezeile einige Male nicht ausgeführt wird.

meine Frage ist :

Wie kann ich eine Bedingung machen wie:

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

Ich kann nicht in js (query!= null)

Ich möchte sehen, ob diese Variable definiert ist. Wie macht man das

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

}
78
Kir Ivlev

Bestimmen Sie, ob die Eigenschaft vorhanden ist (aber kein falscher Wert ist):

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

Normalerweise verwenden

if (query){
   doStuff();
}

ist genügend. Bitte beachte, dass:

if (!query){
   doStuff();
}

doStuff () wird auch ausgeführt, wenn die Abfrage eine vorhandene Variable mit einem falschen Wert war (0, falsch, undefiniert oder null).

Übrigens, es gibt einen sexy Kaffeeskript: 

if object?.property? then doStuff()

welche kompiliert zu:

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

{
  doStuff();
}
21
Rafal Pastuszak

Für mich ein Ausdruck wie

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

ist komplizierter als ich möchte, wie oft ich es verwenden möchte. Das heißt, ich teste häufig, ob eine Variable definiert ist/null. Ich möchte, dass ein solcher Test einfach ist. Um dieses Problem zu beheben, habe ich zuerst versucht, den obigen Code als Funktion zu definieren, aber der Knoten gibt mir nur einen Syntaxfehler und sagt mir, dass der Parameter für den Funktionsaufruf nicht definiert ist. Nicht nützlich! Ich habe also nach etwas gesucht und daran gearbeitet, um eine Lösung zu finden. Vielleicht nicht für jeden. Meine Lösung beinhaltet die Verwendung von Sweet.js , um ein Makro zu definieren. So habe ich es gemacht:

Hier ist das Makro (Dateiname: Makro.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;

Hier ist ein Beispiel für die Verwendung des Makros (in example.sjs):

function Foobar() {
    var self = this;

    self.x = 10;

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

module.exports = Foobar;

Und hier ist die Hauptknotendatei:

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();

Ein Nachteil davon, abgesehen davon, dass Sie Sweet installieren, das Makro einrichten und Sweet in Ihren Code laden müssen, besteht darin, dass dies die Fehlerberichterstattung in Node erschweren kann. Es fügt eine zweite Schicht der Analyse hinzu. Ich habe noch nicht so viel damit gearbeitet, also werde ich sehen, wie es aus erster Hand geht. Ich mag Sweet aber und ich vermisse Makros, also werde ich versuchen, dabei zu bleiben!

11
Chris Prince

Wenn Ihre Variable weder deklariert noch definiert ist:

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

Wenn Ihre Variable aber nicht definiert ist. (In diesem Fall wird angenommen, dass die Variable möglicherweise nicht definiert ist, es kann jedoch ein anderer falscher Wert wie false oder "" sein)

if ( query ) { ... }

Wenn Ihre Variable deklariert ist, aber undefined oder null sein kann:

if ( query != null ) { ... } // undefined == null
5
elclanrs

Für einfache Aufgaben mache ich es oft einfach so:

var undef;

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

Oder wenn Sie einfach nach einem Nullwert suchen möchten ..

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
}
0
JackFuchs

Es klingt, als würden Sie die Eigenschaft eines Objekts überprüfen! Wenn Sie prüfen möchten, dass eine Eigenschaft vorhanden ist (es können jedoch neben Wahrheitswerten auch Werte wie null oder 0 sein), kann der Operator in eine Nice-Syntax verwenden.

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

Wie Sie sehen, wird die _PROTO_ - Eigenschaft hier geworfen. Dies gilt für alle geerbten Eigenschaften. Für weitere Informationen würde ich die MDN-Seite empfehlen:

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

0
MrToad