ECMAscript -> ES 是JS的标准规范
ES6 是JS的第六套标准规范
let声明的变量,会进入暂时性的死区,提升后暂时不允许访问,只有赋值以后才允许访问
let声明的变量不允许重复声明
块级作用域:大括号之间的语句块,例如if、else。块级作用域下,let和const声明的局部变量或者常量,不允许被块级作用域以外访问
let 和 const 即使声明在全局作用域下,也不是全局变量或者常量
可以给参数设置默认值
var a = 值1 && 值2
选择将其中一个值赋给变量a ,当第一个值转布尔型为真时,把第二个值赋给a;当第一个值转为布尔型为假时,程序中断,将第一个值赋值给a
var a = 值1 || 值2
选择将其中一个值赋给变量a ,当第一个值转布尔型为真时,程序中断,把第一个值赋给a;当第一个值转为布尔型为假时,将第二个值赋值给a
简化匿名函数的写法,不等价于匿名函数
()=>{
函数体
}
//如果箭头函数,函数体中只有一行代码,并且是return,可简化
arr.sort((a,b)=>{
return a-b
})
// 简化后
arr.sort((a,b)=>a-b)
匿名函数:
创建函数 var fn = function(){}
自调用 (function(){})()
回调函数
node.js是一种运行环境
js运行在客户端浏览器,有多款浏览器,存在代码兼容性问题;node.js运行在服务器端,只有一种V8引擎环境,不存在兼容性问题
两者都有共同的自定义对象和内置对象,不同的宿主对象
js用于操作网页元素,node.js用于服务器端开发
(1)脚本模式
在命令行下,执行
node 脚本文件路径
(2)交互模式
在命令行下直接输入
node 回车 进入交互模式
可以检测一个变量或者函数是否为全局的
如果一个变量或者函数是全局的,可以通过global访问到
> var a = 1
undefined
> global.a
1
> function fn(){return 2}
undefined
> fn()
2
> global.fn()
2
> let b = 3
undefined
> global.b
undefined
>
node.js的交互模式,属于全局作用域
node.js下,每个js文件都是单独的作用域,变量和函数都是局部的
js下全局对象global名称为window
用于控制台下输出
console.log(1) //打印日志
console.info(2) //打印消息
console.error(3) //打印错误
console.warn(4) //打印警告
//开始计时,开始与结束的值要保持一致
console.time('for')
//结束计时
console.timeEnd('for')
进程:在计算机上启动每个软件都会占用相应的资源
process.arch 查看当前CPU的架构
process.platform 查看当前操作系统
process.pid 查看当前node.js的进程编号
prodess.kill() 结束指定编号的进程
缓存、缓冲区:是内存中的一块区域,是临时存储数据
用法:alloc分配
// 从内存中分配空间作为缓存
//单位是字节
//utf8中每个英文字符占1个字节,汉字占3个字节
var buf = Buffer.alloc(9,'abc一二')
console.log(buf)
// 将缓存里的数据转为字符串
console.log(buf.toString())
node.js下,每个文件就是一个模块
require():是一个函数,用于引入其他模块,得到的是被引入模块暴露的对象
module.expots:默认是一个空对象,当前模块要暴露的对象。需要暴露的对象放在代码中。
__dirname 获取一个模块的绝对路径
__filename 获取一个模块的绝对路径+模块名称
模块系统下分为三类模块:自定义模块,核心模块,第三方模块
以路径开头 | 不以路径开头 | |
---|---|---|
文件模块 | require(‘模块文件路径’) 用于引入自定义模块 |
|
目录模块 | require(‘./02’) 首先会到目录中寻找模块说明文件package.json,再查找文件中main属性对应的文件;如果找不到文件会自动寻找index.js |
require(‘04_nan’) 首先会到当前目录下的node_modules目录中寻找要引入的目录模块,如果没有找到会一直往上一级目录中的node_modules中去查找;用于引入第三方模块 |
CommonJS:是一种模块化规范,Node.Js就是采用这种规范,例如require和module.exports都是这种规范
包:是指第三方模块,都是目录模块的形式
NPM:是Node.js的包管理器,用来管理第三方模块。
npm init -y 初始化生成一个package.json文件,作为项目说明文件,可以记录安装的包
npm install 包名称 下载安装指定的包
npm install 会自动配置项目中的依赖包
npm set registry https://registry.npmmirror.com
网址:统一资源定位器,互联网上的任何资源
new URL() //创建一个URL对象,可以将一个网址转为对象,分离各部分
searchParams //获取网址中查询参数的部分
searchParams.get(参数名) //获取参数名对应的参数值
//一次性定时器
setTimeout(回调函数,间隔时间)
//开启
var timer = setTimeout(()=>{
console.log('时间到')
},3000)
//清除定时器
clearTimeout(timer)
//周期性定时器
setInterval(回调函数,间隔时间)
//开启
var vtimer = setInterval(()=>{
console.log('嘀嘀嘀')
},1000)
//清除
clearInterval(vtimer)
//开启
var timer = setImmediate(回调函数)
//清除
clearImmediate(timer)
//开启后没有清除方法
process.nextTick(回调函数)
js是单线程运行逻辑,所有的程序默认在一个线程执行,出现排队执行
定时器在在主线程之外有一个事件队列,会将回调函数放入事件队列中
同步执行:在主线程中执行,会阻止后续代码执行
异步执行:会将回调函数放入到事件队列执行,不会阻止主线程后续代码执行