【Nodejs 】Nodejs 概述及常见的全局对象

【Nodejs 】Nodejs 概述及常见的全局对象,第1张

目录

一、Nodejs 概述

1、对比JS和Nodejs

2、相关网站

3、运行方式

4、Nodejs特点

二、全局对象

1、global

2、console

3、process

4、Buffer


一、Nodejs 概述
  1、对比JS和Nodejs

JS运行在客户端浏览器,存在多个解释器,存在代码兼容性;Nodejs运行在服务器端,只有一种解释器(那就是谷歌的V8JS引擎),不存在兼容性

两者都有相同的内置(ES)对象(即JS标准规范ECMAScript制定的内置对象),自定义对象,不同的宿主对象(宿主对象是运行在不同的环境下的,浏览器下运行就是浏览器的宿主对象,服务器端运行就是服务端的宿主对象)

JS用于开发浏览器端的交互效果,Nodejs用于服务器端开发,数据库的 *** 作,文件的 *** 作,其它服务器的调用

2、相关网站

Nodejs.org    英文官网

Nodejs.cn      中文镜像       

其他推荐

Node.js 教程 | 菜鸟教程

Node.js 教程 | w3cschool

3、运行方式

脚本模式

      node   拖拽文件    回车 

交互模式

      node    回车   进入到交互模式

                  两次ctrl+c    退出交互模式

交互模式本身就是一个标准输出,不用再写console.log

4、Nodejs特点

支持数万个并发连接,常用于基于社交网络的大规模WEB应用

本身属于是单线程运行,不适合那些CPU密集型的 *** 作

二、全局对象
1、global

在Nodejs下全局变量和全局函数都是可以使用global来访问到的。

所有全局变量都是global对象的属性。在nodejs中能够直接访问到的对象通常都是global的属性,如console、 process等

注意:window作为浏览器的最大宿主对象,而node 是直接用V8引擎直接解析的,所以没有window对象。------nodejs中global代替window

global是全局命名空间对象,下面要说到的processconsolesetTimeout等都有放到global

console.log(process === global.process) // true

练习:在脚本文件global.js中,分别声明变量a和创建函数fn,查看这两项是否为全局的。

var a = 1;
function fn() {
  return 2;
}

//JS全局对象 window
console.log(window.a); // ReferenceError: window is not defined
console.log(window.fn()); // ReferenceError: window is not defined

练习:在脚本文件window.js中,分别声明变量a和创建函数fn,在浏览器中查看这两项是否为全局的。新建window.html文件,引入window.js文件,使用浏览器打开window.html文件,在控制台查看,运行结果。

js文件window.js:

var a = 1;
function fn() {
  return 2;
}

//JS全局对象 window
console.log(window.a); // 1  说明a是全局变量
console.log(window.fn()); // 2 说明fn是全局函数

 html文件window.html:

运行结果:

Nodejs下,每个文件都是在一个模块作用域下,变量和函数都是局部的,防止污染全局     ------每个模块都有自己的作用域,每一个模块内声明的变量都是局部变量, 不会污染全局作用域。

JS下,每个文件都是在全局作用域下,变量和函数都是全局的,存在全局污染。JS的全局对象叫 window

番外:全局对象是什么?Node. js 有哪些全局对象?

在浏览器 JavaScript 中,通常window 是全局对象, 而 Nodejs中的全局对象是 global

NodeJS里,是不可能在最外层定义一个变量,因为所有的用户代码都是当前模块的,只在当前模块里可用,但可以通过exports对象的使用将其传递给模块外部

所以,在NodeJS中,用var声明的变量并不属于全局的变量,只在当前模块生效

像上述的global全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值

Node. js 将全局对象分成两类:真正的全局对象;模块级别的全局对象


真正的全局对象:常见的全局对象有global、console、process、Buffer等等

模块级别的全局对象:require、module、exports、module.exports、__dirname、__filename、Timer(clearInterval、setInterval、clearTimeout、setTimeout)等等

番外:Javascript写在哪里?概括起来就是三种形式:

1、内部:用script标签,写在Html网页的Body部分中;

2、内部:用script标签,写在Html网页的head部分中;

3、外部:写在后缀名为“.js”的文本文件里,并用script标签的src属性引入Html网页。

2、console

也是js的全局对象,js与nodejs都有console全局对象 

log()    打印日志    ---最常用的输出(打印)内容的方式

info()   打印消息

warn()  打印警告

error  打印错误

time()   开始计时

timeEnd()   结束计时

开始计时和结束计时提供的参数要保持一致

练习:分别使用while,do-while,for循环100000次,查看各自耗时

​
/*
console.log(1);  // 日志
console.info(2); // 消息
console.warn(3); // 警告
console.error(4); // 错误
*/

// for 循环
console.time('ran'); // 开始计时
for(let i=1;i<=100000;i++){
}
console.timeEnd('ran'); // 结束计时

// while 循环
console.time('dong');
let i=1;
while(i<=100000){
  i++;
}
console.timeEnd('dong');

// do while 循环
console.time('xin');
let j=1;
do{
  j++;
}while(j<=100000);
console.timeEnd('xin');

​

clear  清空控制台

console.clear

trace()  打印函数的调用栈

function test() {
  demo();
}

function demo() {
  foo();
}

function foo() {
  console.trace();
}
test();

运行结果:

3、process

进程:进程对象,提供有关当前过程的信息和控制

包括在执行node程序的过程中,如果需要传递参数,我们想要获取这个参数需要在process内置对象中

启动进程:

 node index.js 参数1 参数2 参数3

index.js文件如下:

process.argv.forEach((val, index) => {  console.log(`${index}: ${val}`);});

输出如下:

C:\Users\儒雅的烤地瓜\Desktop\demo>node index.js val index
0: D:\swinstall\nodejs\node.exe
1: C:\Users\儒雅的烤地瓜\Desktop\demo\index.js
2: val
3: index

C:\Users\儒雅的烤地瓜\Desktop\demo>

arch   查看当前的cpu架构

platform  查看当前的 *** 作系统

脚本模式:cmd👉node 脚本文件名👉回车。在脚本文件中,使用的是console.log输出命令
console.log(process.platform);
交互模式:首先需要先进入交互模式,cmd👉node👉回车
process.arch  

version  查看当前Nodejs版本号

pid    查看当前进程的编号

kill()   结束指定编号的进程

4、Buffer

缓冲区、缓冲器,在内存中临时存储数据的区域,用于存储网络传输的资源

可以处理二进制以及非Unicode编码的数据。

Buffer类实例化中存储了原始数据。Buffer类似于一个整数数组,在V8堆原始存储空间给它分配了内存。

一旦创建了Buffer实例,则无法改变大小。

let buf=Buffer.alloc(5,'abcd'); // 创建buffer,分配5个字节空间,存储数据

一个英文字母占1个字节一个汉字占3个字节(utf-8编码)

// 把buf对象转为字符串
String(buf); / buf.toString();

两者都是函数,但作用域不同String() 是全局函数,toString()是对象下的方法,使用的话需要调用

番外:Node中Buffer.alloc()和Buffer.allocUnsafe()有什么区别?
可以参考 Node.js 的文档,二者的区别在于 .alloc() 会对分配的空间进行填充,保证新分配的空间不会含有以前的数据。而 .allocUnsafe() 不会填充,所以更快。但是如果 .allocUnsafe() 之后立即 .fill(),其效果和 .alloc() 一样,但执行效率可能会略差(需要实测确定)。

 【后文传送门】👉【Nodejs 】Nodejs常见全局对象之模块对象全解析_02

如果这篇【文章】有帮助到你,希望可以给【青春木鱼】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【前端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️【【Nodejs 】Nodejs常见全局对象之模块对象全解析_02】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存