Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查Node.js中是否定义了变量?_Javascript_Node.js - Fatal编程技术网

Javascript 如何检查Node.js中是否定义了变量?

Javascript 如何检查Node.js中是否定义了变量?,javascript,node.js,Javascript,Node.js,我正在node.js中编写一个程序,实际上是js 我有一个变量: var query = azure.TableQuery... 看起来这行代码有时并没有执行 我的问题是: 我如何处理以下情况: if this variable is defined do this. else do this. 我无法在js(query!=null) 我想看看这个变量是否定义了,做些什么。如果未声明或定义变量,如何执行此操作: if ( typeof query !== 'undefined' &&

我正在node.js中编写一个程序,实际上是js

我有一个变量:

var query = azure.TableQuery...
看起来这行代码有时并没有执行

我的问题是:

我如何处理以下情况:

if this variable is defined do this.
else do this.
我无法在js
(query!=null)


我想看看这个变量是否定义了,做些什么。如果未声明或定义变量,如何执行此操作:

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

}
if ( typeof query !== 'undefined' ) { ... }
如果变量已声明但未定义。(假设此处的情况是变量可能未定义,但它可以是任何其他错误值,如
false

如果您的变量已声明,但可以是
未定义的
空的

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

确定属性是否存在(但不是伪值):

常用

if (query){
   doStuff();
}
这就足够了。请注意:

if (!query){
   doStuff();
}
即使查询是具有falsy值(0、false、undefined或null)的现有变量,doStuff()也将执行

顺便说一句,有一种性感的咖啡脚本方式:

if object?.property? then doStuff()
其汇编目的是:

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

{
  doStuff();
}

听起来像是在对一个对象进行属性检查!如果要检查属性是否存在(但除了truthy值外,还可以是null或0等值),则中的运算符可以使用一些很好的语法

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
如您所见,\uuu proto\uu属性将在此处抛出。这适用于所有继承的属性。为了进一步阅读,我推荐MDN页面:


对我来说,像

if (typeof query !== 'undefined' && query !== null){
   // do stuff
}
它比我想要的要复杂得多,因为我想要使用它的频率。也就是说,测试变量是否定义为/null是我经常做的事情。我希望这样的测试是简单的。为了解决这个问题,我首先尝试将上面的代码定义为一个函数,但node只给了我一个语法错误,告诉我函数调用的参数是未定义的。没用!所以,在搜索和研究这一点时,我找到了一个解决方案。也许不是每个人都这样。我的解决方案涉及使用定义宏。我是这样做的:

这是宏(文件名:macro.sjs):

下面是宏的用法示例(在example.sjs中):

这是主节点文件:

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之外,它还可能使节点中的错误报告变得复杂。它添加了第二层解析。我还没有做过这么多的工作,所以我们将亲眼看看它是如何进行的。我喜欢甜食,但我想念宏,所以我会努力坚持它

对于简单的任务,我通常只需像这样做:

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
}

如果(query!=未定义){/*已定义*/}
为什么有时不定义它?
azure.TableQuery
是否实际返回
undefined
?您是在检查未定义的内容,还是在检查null、空数组、空对象、0…?看起来您正在尝试以同步方式执行一些异步操作(
TableQuery
)。不要这样做,使用回调。我确信这个
azure
东西提供了这个功能。@H2CO3=undefined也会在null值上返回true。他需要用更严格的方法==您能告诉我为什么更改和添加了typeof和&&“notnull”应该是“notnull、zero、false或任何其他计算结果为false的内容”,因为js中的变量可以是null或未定义的。这些是不同的国家。因此,我们必须检查这两个场景要测试这两个场景,您可以执行
query==null
。这将测试
null
undefined
,但没有其他错误值。或者只需执行
query===undefined
即可单独测试该值。@KirillIvlev:未声明的变量和未定义的变量之间有区别。如果变量未声明,则应声明它。如果您得到一个错误,那么这是一个有用的提醒,提醒您正在做错事。这在整数0的case查询中不起作用,尽管
If(query){doStuff();}
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();
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
}