【Nodejs 】Nodejs 概述及常见的全局对象_01
目录
一、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来访问到的。
注意:window作为浏览器的最大宿主对象,而node 是直接用V8引擎直接解析的,所以没有window对象。------nodejs中global代替window
global是全局命名空间对象,下面要说到的process
、console
、setTimeout
等都有放到global
中
console.log(process === global.process) // true
练习:在脚本文件global.js中,分别声明变量a和创建函数fn,查看这两项是否为全局的。
var a = 1;function fn() { return 2;}//JS全局对象 windowconsole.log(window.a); // ReferenceError: window is not definedconsole.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全局对象 windowconsole.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 index0: D:\swinstall\nodejs\node.exe1: C:\Users\儒雅的烤地瓜\Desktop\demo\index.js2: val3: indexC:\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() 一样,但执行效率可能会略差(需要实测确定)。