node.js学习笔记
一、node是什么?
node.js是构建在Chrome v8 引擎上的一个Javascript 运行环境,通俗的说就是用来运行js文件的软件。它解决了高并发的问题,支持大量并发连接,适用于需要大量输入输出的应用(eg:聊天应用、电商网站…)
【官方文档】:
官网:https://nodejs.org/en/
中文官网:https://nodejs.org/zh-cn/
二、node安装及使用
1.单一版本node.js安装
官网选择适合自己开发和电脑系统的node版本安装
缺点:只能安装一个版本的node,运用不够灵活
查看node:
1. win+r 打开命令行窗口
2. 输入node 如果输出结果为当前电脑所安装的node版本号,即为安装成功
2.管理工具 - - nvm 下载
nvm下载链接:
https://github.com/coreybutler/nvm-windows/releases
注意: 如果电脑之前安装过node.js,需要先卸载node.js再进行nvm安装
双击nvm-setup.exe文件,开始安装。指定 nvm 安装目录,保持默认目录不变。
指定 nodejs 安装目录,保持默认目录不变。一直下一步,直到安装成功。
查看nvm是否安装成功:Wim+ r 打开命令行窗口,输入【 nvm -v 】
如果出现版本号等一大串信息,即为安装成功
配置:如果正常下载速度较慢,可以在nvm安装目录(C:\Users\XXXX\AppData\Roaming\nvm)下的settings.txt中,打开后在最后添加镜像:
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
3.nvm 命令
nvm version 或者 nvm current -- 查看nvm版本
nvm ls -- 列出所有版本
nvm list -- 查看当前安装的node使用版本
nvm install 版本号 -- 安装指定版本的node
nvm uninstall 版本号 -- 卸载指定版本的node
nvm use 版本号 -- 选择指定版本的node
nvm on / off -- 关闭 / 打开 node控制
nvm list available -- 查看网络可以安装的版本
4.运行及使用
1.初始化
控制台输入以下命令:
npm init -y // 默认配置初始化
npm init // 自定义配置初始化
2.安装模块
控制台输入以下命令:
默认安装最新版:
npm install 模块名 参数
/*
参数:
--save是安装在当前文件夹,
-g是本地
--save-dev 代表生产环境使用的包
-D代表 --save-dev
*/
指定版本安装:
npm install 模块名@x.x.x //不指定默认最高版本
3.导出、导入模块 ------ 模块化
导出、导入的方式:
1. CommonJs
(1).导出:
module.exports = { 暴露的代码 }
(2).导入:
const 模块 = require('模块/路径');
2.ES6
(1).导出:
默认导出:
export default 数据;
按需导出:
exprot { 导出的数据 }
混合导出:
只能写1次默认导出,可以写多次 按需导出
(2).导入
默认导入:
import 随便写一个变量名 from '模块/路径';
按需导入:
import { 导入的数据 } from '模块或者路径';
混合导入:
import 默认值,{按需导出的数据} from '模块/路径';
注意:node从v13.x之后才支持es6的模块化的写法,如果版本比较低,是不能使用的
使用ES6模块化,需要将js文件后缀改为mjs,
或者在package.json文件夹中添加:"type": "module";
三、ES6常用语法
1.let 关键字
var 与 let 的区别:
1.var 关键字
用var关键字定义变量,有如下主要缺点:
(1).存在变量提升问题,降低 js 代码的可阅读性
(2).没有块级作用域,容易造成变量污染
(3).var用在for循环条件中,造成for 循环的污染的问题
(4).var可以重复定义同一个变量,逻辑错误,第二次应该是修改变量,而不是定义
2.let 关键字
let 主要特性:
(1).let声明的变量没有预解析,不存在变量提升问题,只有定义之后才能使用此变量
(2).先定义再使用(暂时性死区),不可以重复定义,否则会报错
(3).let不可以重复定义同一个变量
(4).let用在for循环条件中,不会造成for 循环的污染的问题
(5).let声明的变量有块级作用域(ES6中的作用域:全局和局部还有块级作用域)
2.const关键字定义变量
const 主要特性:
(1).不存在变量提升问题,只有定义之后才能使用此变量
(2).const 定义的常量,//无法被重新赋值,因为常量无法修改,变量可修改
(3).当定义常量的时候,必须定义且初始化(即需要赋值),否则报语法错误
(4).const 定义的常量,也有 块级作用域
(5).for循环里面定义的const常量,拥有独立的块级作用域,每次循环,都是一个新的作用域
3. 变量的解构赋值
定义:所谓的解构赋值,就是把某个对象中的属性当作变量,单独提取出来,就能够当作变量直接使用。
作用:把一个复杂的数据,拆分成为多个较为简单的数据
语法:
(1).对象解构:
let {属性名 , 属性名, ... } = 对象;
(2).数组解构:
let [变量名,变量名,...] = 数组;
// 解构:
let { 和对象的属性同名的变量名, ... } = 对象;
eg:
// 变量的解构赋值
let user={
name:'linss',
age:99,
gender:'女汉子'
}
//结构赋值:
const { name : name123, age, gender } = user;
// name : name123相当于,把变量name的值赋值给name123
console.log(name123);
4.箭头函数
用法:
(参数) => {
函数体
}
// 如果只有一个参数
参数 => {}
// 如果只有一行代码
() => 代码
// 如果把大括号省略了,会把代码的结果作为 返回值
注意:箭头函数没有自己的作用域,this 指向其外层作用域,即指向上级作用域.
eg:
/* 箭头函数 就是普通函数的简写 */
function fn(a){
return a;
}
let show =()=>{
console.log("hello world")
}
//1.如果大括号中只有一条语句,可以省略大括号
let show=()=>console.log("hello world");
show();
// 2.如果参数,只有一个,可以省略小括号
// 3.只有一个return语句,return可以胜率
let all = a=>a;
console.log(all(1))
5.对象简化
对象简化:省略同名的属性值,省略方法的function
以前在写字面量的对象的时候
{
key:value,
method:function(){}
}
es6中
如果对象的外面已经有一个和属性名同名的变量,可以简化
{
变量名,
}
如果还有方法,也可以简化
{
方法名(){}
}
格式简化为:
{
key,
method(){}
}
6. es6中的面向对象
es6中的面向对象
class 关键字 -- 声明类
语法:
class 类名{
constructor(){}
方法(){}
}
extends 关键字 -- 继承
语法:
class 小分类 extends 大分类{
constructor(){
super()
}
}