私にとっては、
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が好きですが、マクロが恋しいので、それを続けようと思います!