全局对象(global object),不要和 全局的对象( global objects )或称标准内置对象混淆。这里说的全局的对象是说在全局做用域里的内的对象。全局做用域包含了全局对象的属性,还有它继承来的属性。javascript
注意浏览器下的全局对象跟 nodejs 中的全局对象不一致html
window
global
JS 语言规范中的全局的内置对象在 Nodejs 中都有效,如下简单过一下,不熟悉请查MDN 文档前端
这里先简单补充一下模块的概念,后续咱们还会更深刻讲解一下,笔者不想让复杂的内容让初学者分心,只是想让您能快速先创建学习 Nodejs 的信心。NodeJs 中把不一样功能的 api 封装成不一样的模块,避免了不一样功能的代码相互冲突。固然 NodeJS 也支持开发人员写的 Nodejs 代码模块化。若是你是 Java、DotNet 的程序员,那 Nodejs 的模块就是 DotNet 的程序集或者 Java 的包。java
Node 中全部的代码都会被 node 编译器自动包装成模块后再进行解析执行,具体细节后面会有详解。node
console
模块提供了一个简单的调试控制台,相似于 Web 浏览器提供的 JavaScript 控制台。git
注意:全局的 console 对象的方法既不老是同步的(如浏览器中相似的 API)程序员
全局的console
对象能够再 node 中任何地方直接调用。接下来看看它的经常使用方法。github
语法:console.log([data][, ...args])
api
打印到输出控制台,并带上换行符。 能够传入多个参数,第一个参数做为主要信息(字符串类型),其余参数做为代替值。浏览器
var count = 5; console.log('count: %d', count); // 打印: count: 5 到 stdout console.log('count:', count); // 打印: count: 5 到 stdout console.log('count:', count, '-222', '-999'); // 打印: count:5-222-999。 log方法能够把多个参数链接一块输出。
log 方法的第一个参数是一个字符串,包含零个或多个占位符。 每一个占位符会被对应参数转换后的值所替换。 支持的占位符有
%s - 字符串。
%d - 数值(整数或浮点数)。
%i - Integer.
%f - Floating point value.
%j - JSON。若是参数包含循环引用,则用字符串 '[Circular]' 替换。 ...
更多请参考:Node 文档
console.info() 函数是 console.log() 的一个别名。也就是说你用log方法跟info方法一致。
语法:console.error([data][, ...args])
error方法的使用同 log方法,因此不赘述,咱们通常用此方法打印错误消息,通常用log方法打印普通消息。
console.error('error');
另外打印警告信息使用warn方法,此方法仅仅提示开发人员一些警示信息,用法同log方法。
语法:console.warn([data][, ...args])
语法: console.dir(obj[, options])
参数说明:
第一个参数obj,就是要打印属性的对象。
第二个参数options是设置打印的配置项:
showHidden - 若是为 true,则该对象中的不可枚举属性和 symbol 属性也会显示。默认为 false。
depth - 告诉 util.inspect() 函数当格式化对象时要递归多少次。 这对于检查较大的复杂对象颇有用。 默认为 2。 设为 null 可无限递归。
colors - 若是为 true,则输出会带有 ANSI 颜色代码。 默认为 false。 颜色是可定制的,详见定制 util.inspect() 颜色。
var a = { age: 134, t: { name: '33', mm: '333' } }; console.dir(a); console.dir(a, { colors: true, showHidden: true });
dir方法很是有用,在能够辅助咱们调试时查看对象内的属性和继承关系,也是一个很是好的学习js的手段。
同浏览器一致,也封装了计时的两个方法:console.time(label)
和console.timeEnd(label)
;
time方法启动一个定时器,用以计算一个操做的持续时间。 定时器由一个惟一的 label 标识。 当调用 console.timeEnd() 时,可使用相同的 label 来中止定时器,并以毫秒为单位将持续时间输出到 stdout。 定时器持续时间精确到亚毫秒。
console.time('lb1'); for (let i = 0; i < 100; i++) {} console.timeEnd('lb1'); // 打印 lb1: 23.43ms
说明 | 实例 |
---|---|
打印堆栈跟踪在代码 | console.trace([message][, ...args]) |
计数器的显示标签 | console.count([label]) |
重置指定 label 的内部计数器。 | console.countReset([label='default']) |
清空控制台 | console.clear() |
断言 | console.assert(value[, message][, ...args]) |
console的方法还比较多,这里就不一一列举了,有兴趣的能够直接参考中文文档
node提供了全局的3个设置定时器方法:
setImmediate(callback[, ...args])
setInterval(callback, delay[, ...args])
setTimeout(callback, delay[, ...args])
另外对应3个取消定时器的方法
clearImmediate(immediate)
clearInterval(timeout)
clearTimeout(timeout)
三个方法,使用上基本都表现一致,这里只说一种状况,其余类比。
参数说明:
callback <Function> 当定时器到点时要调用的函数。 delay <number> 调用 callback 以前要等待的毫秒数。 ...args <any> 当调用 callback 时要传入的可选参数。
var timer = setTimeout(()=>{ console.log(123); }, 100); // .... js代码 clearTimeout(timer);
callback 可能不会精确地在 delay 毫秒被调用。 Node.js 不能保证回调被触发的确切时间,也不能保证它们的顺序。 回调会在尽量接近所指定的时间上调用。
注意:当 delay 大于 2147483647 或小于 1 时,delay 会被设为 1。
另外全局还提供了 Buffer
、模块相关变量、process
等全局变量。
这些内容,等咱们后续章节再详细介绍。
到此为止,您若是熟悉前端开发的话,这不就是前端js移到了nodejs上执行了吗?的确如此,可是这运行的环境已经脱离了浏览器,是直接运行在操做系统之上了。
那么nodejs背后是怎样运行的?模块机制是怎么搞到的?且看下回再解。
参考: