node.js中的“全局”对象

时间:2010-11-09 11:26:45

标签: namespaces node.js

我正在使用0.3.1-pre Node.js

这样做:

typeof global.parseInt

结果

'undefined'

然而,在输入“global”后在控制台中按[Tab]时。给出一个函数列表,包括parseInt。

那么parseInt是全局命名空间的成员吗?

4 个答案:

答案 0 :(得分:13)

从NodeJS v0.8.14开始,global似乎可以在浏览器中的窗口对象之类的模块中工作。

测试:

<强> 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

答案 1 :(得分:9)

显然,global对象不是全局对象,因为window在浏览器中。它(根据#nodejs @ freenode中的micheil)真的只在内部使用。关于全局闭包的东西等等。

parseIntsetTimeout以及所有这些好友都是全球性的。不属于任何可见的全局对象。

答案 2 :(得分:9)

在没有app.js的{​​{1}}中定义变量,就像var一样,使其在项目的每个myvar='someval'内都可见

答案 3 :(得分:0)

失败

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 ] ){ ... }

我假设您已进入此页面,了解有关node.js中的“全局”的信息,因为您希望使用“ window”的等同项来检查全局声明的变量。 bFunc的解决方案对我不起作用,因为它似乎需要明确执行以下操作:

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

我将在这里留下我的答案,因为我听说人们在您输入错误时更可能纠正您,因此也许有人会用问题的答案来纠正我。