Node入门教程(5)第四章:global 全局变量
global - 全局变量
全局对象(global object),不要和 全局的对象( global objects )或称标准内置对象混淆。这里说的全局的对象是说在全局作用域里的内的对象。全局作用域包含了全局对象的属性,还有它继承来的属性。
注意浏览器下的全局对象跟 nodejs 中的全局对象不一致
- 浏览器环境下的全局对象就是
window - Node 的全局对象是
global
JS 语言标准的全局的内置对象
JS 语言规范中的全局的内置对象在 Nodejs 中都有效,以下简单过一下,不熟悉请查MDN 文档
- 全局属性
- Infinity
- NaN
- undefined
- null 字面量
- 函数属性
- eval()
- uneval()
- isFinite()
- isNaN()
- parseFloat()
- parseInt()
- decodeURI()
- decodeURIComponent()
- encodeURI()
- encodeURIComponent()
- escape()
- unescape()
- 基本对象与其他内容
- Object
- Function
- Boolean
- Symbol
- Error
- Number
- Math
- Date
- String
- RegExp
- Array
- Map
- Set
- JSON
- ArrayBuffer
- Promise
- Generator
- GeneratorFunction
- Reflect
- Proxy
- arguments
nodejs 中的全局变量
关于模块的补充
这里先简单补充一下模块的概念,后续我们还会更深入讲解一下,笔者不想让复杂的内容让初学者分心,只是想让您能快速先建立学习 Nodejs 的信心。NodeJs 中把不同功能的 api 封装成不同的模块,避免了不同功能的代码相互冲突。当然 NodeJS 也支持开发人员写的 Nodejs 代码模块化。如果你是 Java、DotNet 的程序员,那 Nodejs 的模块就是 DotNet 的程序集或者 Java 的包。
Node 中所有的代码都会被 node 编译器自动包装成模块后再进行解析执行,具体细节后面会有详解。
console(控制台)
console 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台。
注意:全局的 console 对象的方法既不总是同步的(如浏览器中类似的 API)
全局的console对象可以再 node 中任何地方直接调用。接下来看看它的常用方法。
- 打印日志 console.log
语法:console.log([data][, ...args])
打印到输出控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息(字符串类型),其他参数作为代替值。
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背后是怎样运行的?模块机制是怎么搞到的?且看下回再解。
参考:
github地址:https://github.com/malun666/aicoder_node
Node入门教程(5)第四章:global 全局变量的更多相关文章
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...
- D3.js的v5版本入门教程(第四章)—— 理解Update、Enter、Exit
D3.js的v5版本入门教程(第四章) Update.Enter.Exit是D3.js中很重要的概念,下面来讲一下它们到底是什么?(当你看完后.你就会知道如果数据集个数和选择集个数不匹配的情况下使用d ...
- Node入门教程(13)第十一章:mocha单元测试+should断言库+istanbul覆盖率测试+art-template
声明:以下为老马的全栈视频教程的笔记,如果需要了解详情,请直接配合视频学习.视频全部免费,视频地址:https://ke.qq.com/course/294595?tuin=1eb4a0a4 node ...
- Node入门教程(6)第五章:node 模块化(上)模块化演进
node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...
- Node入门教程(7)第五章:node 模块化(下) npm与yarn详解
Node的包管理器 JavaScript缺少包结构的定义,而CommonJS定义了一系列的规范.而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题. ...
- Node入门教程(8)第六章:path 模块详解
path 模块详解 path 模块提供了一些工具函数,用于处理文件与目录的路径.由于windows和其他系统之间路径不统一,path模块还专门做了相关处理,屏蔽了彼此之间的差异. 可移植操作系统接口( ...
- Node入门教程(4)第三章:第一个 Nodejs 程序
第一个 Nodejs 程序 本教程仅适合您已经有一定的JS编程的基础或者是后端语言开发的基础.如果您是零基础,建议您先学一下老马的前端免费视频教程 第一步:创建项目文件夹 首先创建 demos 文件夹 ...
- Node入门教程(9)第七章:NodeJs的文件处理
Node的文件处理涉及到前面说的ptah模块,以及fs文件系统.stream流处理.Buffer缓冲器等模块.内容可能比较多,相关内容请以官网文档为主,此处主要以案例讲解为主,分享给大家一些常用的经典 ...
- ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...
随机推荐
- luogu2402 奶牛隐藏
题目描述 在一个农场里有n块田地.某天下午,有一群牛在田地里吃草,他们分散在农场的诸多田地上,农场由m条无向的路连接,每条路有不同的长度. 突然,天降大雨,奶牛们非常混乱,想要快点去躲雨.已知每个田地 ...
- A brief introduction to weakly supervised learning(简要介绍弱监督学习)
by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...
- ccd采集
- 分布式日志收集系统:Flume
Flume知识点: Event 是一行一行的数据 1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去. 2.flume里面有个核心概念,叫做agent.agent是一个java进程,运 ...
- MSSQL存储过程--CAST和CONVERT使用区别
数据类型显示转换:CAST和CONVERT(CAST 函数基于 SQL-92 标准并且优先于 CONVERT) ①: CAST是时间类型和字符串之间的转换,使用:CAST(expression AS ...
- [转]ICE介绍 (RFC 5245)
[转]ICE介绍 (RFC 5245) http://blog.csdn.net/dxpqxb/article/details/22040017 1关于ICE的10个事实 1 ICE使用STUN和TU ...
- c++ 指针总结 函数参数指针调用和堆栈内存的分配原理
c++中的char指针 这个char指针很有意思,char指针通常有两种初始化形式.一个是使用char数组初始化,一个是使用char变量初始化. c++当中使用双引号括起来的字符串起始已经被编译器初始 ...
- 进入PE后不显示硬盘的解决办法
其实我很早之前就知道这个方法了,我虽然不知道原因,不过我是一个一个试出来的,转过来备忘, 内容介绍:经常使用PE的朋友相信都遇到过这样的问题,一些新购买的电脑可以正常把PE系统安装到U盘中,也可以正常 ...
- 【前端单元测试入门03】Sinon
前端测试存在的问题 在讲Sinon之前,我们得先讲一下在学习了Mocha.chai以及enzyme之后,我们的前端测试还存在的一些问题. 比如前台测试需要与后台交互,获取后台数据后再根据相应数据进行测 ...
- SpringBoot(四)SpringBoot中lombok使用
lombok概述 lombok简介 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写 ...