Für mich ein Ausdruck wie
if (typeof query !== 'undefined' && query !== null){
}
ist komplizierter als ich möchte, wie oft ich es verwenden möchte. Das heißt, ich teste häufig, ob eine Variable / null definiert ist. Ich möchte, dass ein solcher Test einfach ist. Um dies zu beheben, habe ich zuerst versucht, den obigen Code als Funktion zu definieren, aber der Knoten gibt mir nur einen Syntaxfehler aus und teilt mir mit, dass der Parameter für den Funktionsaufruf undefiniert ist. Nicht nützlich! Als ich nach diesem Bit suchte und daran arbeitete, fand ich eine Lösung. Vielleicht nicht für jedermann. Meine Lösung besteht darin, mit Sweet.js ein Makro zu definieren. So habe ich es gemacht:
Hier ist das Makro (Dateiname: macro.sjs):
macro isDefined {
rule {
($x:expr)
} => {
(( typeof ($x) === 'undefined' || ($x) === null) ? false : true)
}
}
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));
console.log(isDefined(self.x));
}
module.exports = Foobar;
Und hier ist die Hauptknotendatei:
var sweet = require('sweet.js');
sweet.loadMacro('./macro.sjs');
var Foobar = require('./example.sjs');
var x = new Foobar();
Ein Nachteil davon ist, dass Sweet nicht nur installiert, das Makro eingerichtet und Sweet in Ihren Code geladen werden muss, sondern auch die Fehlerberichterstattung in Node erschweren kann. Es wird eine zweite Analyseebene hinzugefügt. 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!
if (query != undefined) { /* defined */ }