目录
一、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 中文镜像
3、运行方式其他推荐
Node.js 教程 | 菜鸟教程
Node.js 教程 | w3cschool
脚本模式
node 拖拽文件 回车
交互模式
node 回车 进入到交互模式
两次ctrl+c 退出交互模式
4、Nodejs特点交互模式本身就是一个标准输出,不用再写console.log
支持数万个并发连接,常用于基于社交网络的大规模WEB应用
本身属于是单线程运行,不适合那些CPU密集型的 *** 作
二、全局对象1、global
在Nodejs下全局变量和全局函数都是可以使用global来访问到的。
所有全局变量都是global对象的属性。在nodejs中能够直接访问到的对象通常都是global的属性,如console、 process等
注意: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全局对象 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)等等
2、console番外:Javascript写在哪里?概括起来就是三种形式:
1、内部:用script标签,写在Html网页的Body部分中;
2、内部:用script标签,写在Html网页的head部分中;
3、外部:写在后缀名为“.js”的文本文件里,并用script标签的src属性引入Html网页。
也是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】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)