Node.js基础学习(第一幕)
1、Node.js概述:
①Node.js是使用C++编写的基于V8引擎的js运行时环境。——js解释器
②Node.js是一门后端编程语言,基于ECMAScript的,提供了很多前端js中没有的扩展对象。——后端编程语言
前端js中的对象:
1)ES原生对象:String、Number、Math、Date、Error、RegExp、Function、Array、Boolean、Object
2)BOM&DOM
3)自定义对象
Node.js中的对象:
1)ES原生对象
2)Node.js核心对象
3)大量的第三方对象
4)自定义对象
③Node.js可以编写独立的web服务器端应用,无需借助于任何其他web服务器。——web服务器
Node.js的意义:
1)执行效率高
2)使用一门语言统一了前后端开发——基于ES ——》 全栈工程师
Node.js的特点:
1)单线程逻辑处理
2)非阻塞
3)异步I/O处理
4)事件驱动编程
2、Node.js的两种运行模式:
①交互模式——用于测试
在交互模式下,Node.js自带的模块无需引入,直接使用。
执行方法:输入js语句,回车执行
②脚本模式——用于开发
把要执行的js语句编写在一个文本文件中 ,一次性的提交给nodejs解释器执行。这个文本文件可以是.js结尾的,也可以是没有后缀的。
在脚本模式下,除了全局对象的成员外,所有其他模块和方法必须使用require()引入。
执行方法:node 文件路径
注意:Node.js中没有BOM和DOM对象!
3、Node.js的基础语法和ES6新特性
①数据类型
1)原始类型
原始类型的数据直接赋值就可以:string、number、boolean、null、undefined
2)引用类型——对象类型
包含ES原生对象、Node.js对象、自定义对象: 引用类型数据一般使用new关键字创建
②模板字符串
ES6中提供的一种新的字符串形式。
1)使用模板字符串定义的字符串,数据可以实现换行 // `内容:${变量}`
2)可以在模板字符串内部进行变量之间的运算 //`内容:${变量+变量}`
③严格模式:是ES5新增的比普通模式更加严格的一种js运行模式。——全新的模式
使用方法:2个范围
1)是整个脚本文件的起始启用严格模式
在脚本文件开头:"use strict";
2)在单个函数中启用严格模式。
function(){ "use strict"; ......}
严格模式的规格:
1)修改常量的值是非法的。——将静默失败升级为错误
2)不允许对未声明的变量赋值
3)匿名的this不再指向全局,是undefined
④变量的作用域
全局作用域、局部作用局(函数作用局)、块级作用域
块级作用域:只能在当前代码块中使用
代码块:任何一个大括号{}就是一个“代码块”,if/for/while,每一个代码块就是一个独立的作用域
在代码块中使用let声明块级作用域变量,出了块,就不能访问。
⑤逻辑结构
(1)循环结构
for....of...——ES6新特性(遍历数组的元素值)
(2)选择结构
⑥函数
匿名函数的自调
箭头函数 =>
箭头函数仅在匿名函数中使用;箭头函数多用于回调函数中 ()=>{}
使用箭头函数实现闭包
⑦对象
对象的分类:
(1)ES原生对象
(2)Node.js核心对象
(3)大量的第三方对象
(4)自定义的对象
创建对象的四种方式:
(1)对象直接量
(2)构造函数的方式
(3)原型继承方式
(4)class方式——ES6新特性
class,类,一组相似对象的属性和行为的抽象集合
instance,实例化,是从属于某一个类的具体对象
class Emp{
constructor(ename){
this.ename=ename;
}
work(){}
}
使用class定义的对象,如何实现继承:
class Programmer extends Emp{
constructor(ename,salary,skills){
super(ename,salary);
this.skills=skills;
}
work(){
return super.work()+'He\'s skills is '+this.skills;
}
}
4、全局对象
Node.js中的全局对象为Global
在交互模式下,声明的全局变量和函数,都是global对象的成员——全局对象污染
在脚本模式下,声明的全局变量和函数,不是global对象的成员——避免全局对象污染
Global对象的成员属性和成员方法:
①console 向stdout(标准输出)和stderr(标准错误)中输入信息
console.log() & console.info() 向stdout输出日志信息
console.error() & console.warn() 向stderr输出错误信息
console.trace() 向stderr输出栈轨迹信息
console.dir() 向stdout输出指定对象的字符串表示
console.assert() 断言,为真的断言,错误信息不回输出,为假的断言,抛出错误对象,输出错误信息,并且终止脚本运行。错误信息可以自定义。
console.time() 测试代码的执行时间
console.timeEnd()
注意:console对象的方法是异步的,书写顺序不一定和执行结果顺序一致
②process 进程
process.arch //获取CPU架构类型
process.platform //获取操作系统类型
process.env //获取操作系统的环境变量
process.cwd() //获取当前所在的工作目录
process.execPath //获取node解释器所在目录
process.versions //获取node版本信息
process.uptime() //获取node进程运行时间(s)
process.memoryUsage() //获取node进程的内存使用情况
process.pid //获取当前进程id号
process.kill(pid) //向指定进程id号发送退出信号
③定时器
setTimeout() //一次性定时器
setInterval() //周期性定时器
setImmediate() //下次事件循环开始前立即执行的计时器
process.nextTick() //本次事件循环结束后立即执行的计时器
Node.js的模块系统:
Node.js中使用"Module(模块)"来规划不同的功能对象。
模块的分类:
(1)核心模块——nodejs的内置模块
(2)第三方模块——例如:mysql模块,自己下载
(3)自定义模块
每一个被加载的.js文件对应一个模块对象,包含相应的功能和函数。
模块中声明的变量或函数的作用域是“模块作用域”,不是golbal的成员,默认只能在当前js文件(即当前模块)中使用。
Node.js启动时运行的第一个模块,成为“主模块”。——mail module,也是自身模块。除主模块之外的其他模块,称为“子模块”。
nodejs官网:nodejs.org