为什么某些节点属性在我记录它时会给我未定义?

时间:2014-07-08 19:53:22

标签: javascript node.js

我的节点应用程序中有一个端点,我正在执行以下操作...

app.put('/api/authentication', function(req,res){            
    console.log(global.ff);  //undefined
    console.log(req.ff);     //undefined
    console.log(blah);       //throws error    
});

我不明白为什么前两个给我“未定义”#。他们应该抛出一个错误,因为我从来没有宣布它们。但是就好像node.js已经神奇地声明了它们,这也就是为什么它们不像最后一个那样抛出错误......有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

undefined和“不存在”

之间存在差异

在前两行中,globalreq是现有变量,它们只是没有您要求的keys - 所以您得到{{1} }。

但是,undefined根本不存在 - 节点甚至无法询问您正在寻找的密钥。请注意,您可以根据this answer测试未定义。

如果您已定义上述blah,但未对其设置任何值(blah),则会在那里收到另一个var blah;错误。

答案 1 :(得分:0)

globalreq是现有变量。

要求现有变量中的密钥返回它,如果没有找到 - 告诉密钥是undefined

下一个代码也将返回undefined:

var blah = "";
console.log(blah.blah);