热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Node入门教程(5)第四章:global全局变量

global-全局变量全局对象(globalobject),不要和全局的对象(globalobjects)或称标准内置对象混淆。这里说的全局的对象是说在全局作用域里的内的对象。全局
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 中任何地方直接调用。接下来看看它的常用方法。

  1. 打印日志 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方法一致。

  1. 打印错误消息和警告信息

语法:console.error([data][, ...args])

error方法的使用同 log方法,所以不赘述,我们一般用此方法打印错误消息,一般用log方法打印普通消息。

console.error(‘error‘);

另外打印警告信息使用warn方法,此方法仅仅提示开发人员一些警示信息,用法同log方法。

语法:console.warn([data][, ...args])

  1. 打印对象结构

语法: 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的手段。

  1. 时间计时

同浏览器一致,也封装了计时的两个方法: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
  1. 其他方法
说明实例
打印堆栈跟踪在代码 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背后是怎样运行的?模块机制是怎么搞到的?且看下回再解。


参考:

  1. NodeJs 官网文档
  2. MDN 文档

老马免费视频教程

返回教程列表首页

github地址:https://github.com/malun666/aicoder_node

Node入门教程(5)第四章:global 全局变量


推荐阅读
  • 本文深入探讨了原型模式在软件设计中的应用与实现。原型模式通过使用已有的实例作为原型来创建新对象,而不是直接通过类实例化。这种方式不仅简化了对象的创建过程,还提高了系统的灵活性和效率。具体来说,原型模式涉及一个支持克隆功能的接口或基类,子类通过实现该接口来提供具体的克隆方法,从而实现对象的快速复制。此外,文章还详细分析了原型模式的优缺点及其在实际项目中的应用场景,为开发者提供了实用的指导和建议。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 在Spring框架中,基于Schema的异常通知与环绕通知的实现方法具有重要的实践价值。首先,对于异常通知,需要创建一个实现ThrowsAdvice接口的通知类。尽管ThrowsAdvice接口本身不包含任何方法,但开发者需自定义方法来处理异常情况。此外,环绕通知则通过实现MethodInterceptor接口来实现,允许在方法调用前后执行特定逻辑,从而增强功能或进行必要的控制。这两种通知机制的结合使用,能够有效提升应用程序的健壮性和灵活性。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • 在探讨如何高效处理大规模数据报表的分页展示之前,首先需要明确导致报表加载缓慢的主要原因。通常情况下,这主要是由于两个方面:一是查询条件过于宽泛,使得数据库返回的结果集包含数百万甚至更多的记录;二是前端渲染性能不足,无法高效处理大量数据。为了优化这一过程,可以从以下几个方面入手:优化查询条件,减少不必要的数据返回;采用分页查询技术,每次仅加载所需的数据;利用缓存机制,减少对数据库的频繁访问;提升前端渲染效率,使用虚拟滚动等技术提高用户体验。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • Vuex 实战进阶:构建高效笔记本应用(第二篇)
    在上一篇文章中,我们初步探讨了 Vuex 在该项目中的应用。本文将深入解析整个项目的架构设计。首先回顾 `main.js` 的内容,然后重点分析 `App.vue` 文件,其中引入了 `Toolbar.vue` 和 `NodeList.vue` 组件,详细说明它们在应用中的作用和交互方式。通过这些组件的协同工作,我们将展示如何构建一个高效且响应迅速的笔记本应用。 ... [详细]
  • jQuery学习笔记:深入理解事件委派(2014年8月3日)
    在jQuery中,事件委托机制主要通过`closest()`方法实现。该方法用于查找与指定选择器匹配的最近祖先元素,从当前元素开始逐级向上遍历DOM树。这一技术不仅提高了代码的效率,还能有效处理动态生成的元素。参考资料:jQuery遍历方法详解。 ... [详细]
  • 深入探讨Photoshop的高级应用与技巧
    本文深入探讨了Photoshop的高级应用与技巧,不仅涵盖了常用的快捷键,如矩形选框工具(M)、移动工具(V)、套索工具(L)、魔棒工具(W)、裁剪工具(C)等,还介绍了更多专业功能,如图层蒙版、混合模式和智能对象的使用方法,帮助用户提升图像处理的效率和质量。 ... [详细]
  • IDEA中高效利用代码变量名替换功能提升编程效率
    在使用 IntelliJ IDEA 进行公司项目代码审查时,我发现许多变量的命名不符合驼峰式命名规范。起初,我尝试手动逐个修改这些变量名,但效率低下。后来,我偶然发现了 IDEA 中的代码变量名替换功能,这极大地提高了我的工作效率。通过该功能,我可以快速批量地将不规范的变量名修改为符合命名规则的形式,不仅节省了时间,还减少了出错的可能性。此外,我还利用这一功能对整个项目的代码进行了全面的优化,确保所有变量命名一致且易于理解。 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • 如果你对项目管理和系统架构感兴趣,欢迎关注微信订阅号“softjg”,加入我们这个PM和架构师的大家庭。本文将探讨编写高质量软件架构文档的重要性及其优势。良好的架构文档不仅能够促进不同利益相关者之间的沟通与理解,还能为项目的长期维护和扩展提供坚实的基础。通过详细记录系统的设计决策和关键组件,架构文档能够确保团队成员在项目周期内保持一致性和高效协作。 ... [详细]
  • 在使用关系型数据库时,通常需要通过用户名和密码进行身份验证才能访问数据。然而,MongoDB默认情况下并不强制要求这种身份验证机制,使得用户无需凭据即可访问并执行各种操作。虽然这一设计简化了初学者的上手过程,但也带来了显著的安全风险。为了提升MongoDB的连接安全性,本文将探讨多种策略与实践,包括启用身份验证、配置网络访问控制、加密通信以及定期审计安全设置,以确保数据库的安全性和数据的完整性。 ... [详细]
author-avatar
俊谚怡雯綺修
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有