我正在使用0.3.1-pre版本的Node.js
执行以下操作:
typeof global.parseInt
导致
'undefined'
然而,在控制台中键入“global.”后按[Tab]会列出函数列表,包括parseInt。
那么,parseInt是全局命名空间的成员吗?
我正在使用0.3.1-pre版本的Node.js
执行以下操作:
typeof global.parseInt
'undefined'
然而,在控制台中键入“global.”后按[Tab]会列出函数列表,包括parseInt。
那么,parseInt是全局命名空间的成员吗?
截至NodeJS v0.8.14版本,全局变量似乎可以跨模块工作,就像浏览器中的window对象一样。
测试:
a.js:
a1 = console.log; // Will be accessed from b.js
global.a2 = console.log; // Will be accessed from b.js
require('./b.js');
b1('a: b1');
b2('a: b2');
global.b1('a: global.b1');
global.b2('a: global.b2');
b.js:
a1('b: a1');
a2('b: a2');
global.a1('b: global.a1');
global.a2('b: global.a2');
b1 = console.log; // Will be accessed from a.js
global.b2 = console.log; // Will be accessed from a.js
运行a.js输出:
b: a1
b: a2
b: global.a1
b: global.a2
a: b1
a: b2
a: global.b1
a: global.b2
显然,global
对象不像浏览器中的window
那样是全局对象。据micheil在 #nodejs @ freenode 中说,它只是在内部使用。似乎与全局闭包有关等等。
parseInt
、setTimeout
以及它们的所有同伴都是自己的全局变量。它们不属于任何可见的全局对象。
global
的文档(关于它实际上是做什么的一直有点混淆)。现在它确实包含了您设置的“全局”变量(在任何函数范围之外),但是每个模块都有一个新的全局对象,因此它不跨模块。在 index.js 中的 var a = 1
只能在 index.js 中作为 global.a
使用。 - Tor Valamo在app.js
中定义变量时,如果不加上var
关键字,例如myvar='someval'
,这将使得该变量在项目中的每个.js
文件中都可见。
失败:
if( global[ some_object_i_want_to_exist ] ){ ... }
工作:
//: outside of all functions, including IIFE.
const THE_GLOBAL_YOU_PROBABLY_WANT_IS_THIS=( this );
//: Within a function:
const G = THE_GLOBAL_YOU_PROBABLY_WANT_IS_THIS;
if( G[ some_object_i_want_to_exist ] ){ ... }
global.some_object_i_want_to_exist = whatever;
在使用之前的先决条件
global[ some_object_i_want_to_exist ]
编辑:看着我的代码,似乎我解决问题的唯一原因是因为我在文件中的其他地方使用了“exports.some_object_i_want_to_exist”。如果没有那个,我的解决方案就会失败。所以...我不知道如何可靠地确定一个对象是否存在于Node.js中给定的范围内。
这里是全局对象的文档: https://nodejs.org/api/globals.html
我将保留我的答案,因为我听说人们更有可能在你错误时纠正你,所以也许有人会纠正我并给出问题的答案。
typeof parseInt
?这对我很有效。 - jwueller