第1章-安装Node.js及相关要点-1.3.Node.js的全局变量和保留字

来源:互联网 发布:淘宝二手铁艺设备 编辑:程序博客网 时间:2024/05/22 06:07

一、浏览器的JavaScript中,如果遗漏了var,变量就会变成全局变量,污染全局命名空间。

二、浏览器的JavaScript中有window对象,但是在Node.js中却没有(显然我们不需要同浏览器窗口打交道),它为开发者提供了新的对象/关键字;

1.process
2.global
3.module.exports 和 exports

三、Node.js进程相关信息

每个运行中的Node.js脚本本质上都是一个进程。
例如:ps aux | grep 'node' 可以输出当前机器上所有运行中的Node.js程序。

开发者可以在程序中通过使用process对象(如:node -e "console.log(process.pid)")来非常方便地获取一些同进程相关的有用信息
在Node.js中使用pid(进程ID)和cwd(当前工作目录)

四、在Node.js中访问全局空间

在浏览器JavaScript中,默认会把所有的东西都丢到全局作用域中。
Node.js使用了不同的设计方式,默认所有的东西都是本地的。
当我们要访问全局对象的时候,才会出现global对象。而且,当需要导出一些东西的时候,必须特别明确的声明。

在某种意义上,浏览器中的window其实类似于global和process对象的组合体。

当然,用来展示Web页面中DOM(文档对象模型)的document对象也不会在Node.js中存在。

五、导入和导出模块

浏览器端JavaScript中的另一个缺陷在于,没有任何方法来引入模块。脚本虽然支持通过另一种语言(HTML)来加载到一起,但是仍然缺乏一个对依赖进行有效管理的机制。
不过CommonJS和RequireJS已经通过AJAX-y的方法解决了这个问题,Node.js在实现上从CommonJS的设计理念中借鉴了很多东西。

在Node.js中要导出一个对象:exports.name=object

var messages = {    find: function (req, res, next){    ...    },    add: function (req, res, next){    ...    },    format: 'title | date | author'}exports.messages = messages;

当我们在文件中需要引入上文的脚本时(假设路径和文件名为route/messages.js)

var messages = require('./routes/messages.js');

这种方式在有些时候非常适合调用构造器,比如当我们要为Express.js配置属性时,这种情况下,需要module.exports:

module.exports = function(app){    app.set('port', process.env.PORT | 3000);    app.set('views', __dirname + '/views');    app.set('view engine', 'jade');    return app;}

在引入上文实例中的模块文件中,写入:

...var app = express();var config = require('./config/index.js');app = config(app);...

更简单的代码为

var app = express(); require('./config/index.js') (app);

在引入模块时较为常见的一种错误是文件路径的问题。Node.js中的核心模块,文件名前无须添加任何路径—如require(‘name’)
这种规则也适用于node_modules文件夹下的各个模块
对于其他文件,则使用“.”来衔接。

var keys = require('./keys.js'),    messages = require('./routes/message.js');

另外,在引入文件的时候,可能会使用__dirnamepath.join()从而导致更长的语句,如:require(path.join(__dirname, 'routes', 'messages'));我们推荐使用这种方法,
path.join()可以生成带有有效斜杠语法的路径(根据系统不同,分别会生成斜杠或者反斜杠)

如果require()指向了一个文件夹,Node.js就会尝试读取文件夹下index.js文件的内容。

六、__dirname和process.cwd的对比

__dirname是使用全局变量文件的绝对路径,而process.cwd是运行脚本进程的绝对路径。所以,当我们在不同文件夹中运行程序的时候,前者和后者的值可能并不相同,如$ node ./code/program.js

七、浏览器API辅助工具

Node.js中有非常多的工具函数来自于浏览器端JavaScript的应用程序接口(API)。
最常用的String,Array,Math对象
1.Array
some()和every():对数组做断言判断
join()和concat():将数组转换为字符串
pop()、push()、shift()和unshift():栈和队列的相关操作
map():遍历数组并处理相关元素
filter():查询数组元素
sort():对元素进行排序
reduce()和reduceRight():进行相关计算
slice():将数组一部分复制出来
splice():直接对数组进行切割
indexOf():获取指定元素在数组中的索引值
reverse():将数组倒序排序
in操作符:在数组元素上进行迭代
2.Math
random():随机产生一个大于0小于1的数值
3.String
substr()和substring():获取子字符串
length():获取字符串长度
indexOf():获取指定值在字符串中的索引值
split():将字符串切割成数组

另外一些:setInterval()、setTimeout()、forEach()和console()

0 0
原创粉丝点击