ES6知识点
let与const
let和const的作用域都是块级作用域,都不能重复声明,都不存在变量提升,在变量声明前使用会导致暂时性死区。两者的区别在于,let声明的是一个常量,声明时可以不赋值,声明后可以修改;const声明的是一个常量,声明时一定要赋值,声明后不能被修改。
const中保存的是变量指向的内存地址。对于基本数据类型而言,值就是指向内存地址中的数据,等同于常量。对于引用类型而言,const保存的是一个指向固定地址的指针。
因此如果const声明一个对象,对象是可以添加新属性的,声明一个数组也是可以通过push方法添加数据。要真正冻结对象,不允许重复赋值的话,使用Object.freeze方法。
冻结对象本身
const foo = Object.freeze({})
彻底冻结,包括属性
1 |
|
var的作用域是全局作用域,有变量提升,可以重复声明。
let与var的区别:当在一个for循环里面时,var声明的i是全局的,每次修改的都是同一个变量,let声明的i仅在本轮循环中有效,每一次循环的i都是一个新变量,js会记住上一次循环i的值,来初始化本轮的i。
块级作用域与函数声明
es5中只有全局作用域和函数作用域,es6新增块级作用域,所以按es5的规则,函数不能定义在块级作用域中,但是在浏览器中,函数可以声明在块级作用域中,并且会被提升到全局作用域或者是函数作用域的头部(类似var),也提升到当前块级作用域的头部。
声明变量的六种方法
var,let,const,function,import,class
顶层对象
在浏览器中顶层对象是指window,在node中指的是global,es5中顶层对象与全局对象是等价的。
循环遍历
最原始的是for循环,数组也提供内置的forEach方法,参数是一个函数
myArray.forEach(function (value)){
value+1
}
缺点在于不能中途跳出,break,return无效
For-in 遍历的是键名key,是一个字符串,主要是为遍历对象设计的,不适合遍历数组
Es6中新增for-of循环
for-of遍历的是值,提供了遍历所有数据结构的统一操作接口,可以用break跳出循环
rest参数与扩展运算符
互为逆运算,rest用于获取函数多余参数,…扩展运算符是将一个数组转为用逗号分隔的参数序列
扩展运算符是将数组分割为序列,rest运算符是将分割序列合并为数组
…拓展运算符
用于遍历对象所有可以访问的参数
set
es6新结构,创建值唯一的对象
字符串模板
${},可以执行js
flat,flatMap
数组扁平化,flat将数组拉平,默认拉平一层,参数为Infinity就可以拉平任意层。flatMap实际是先执行Map函数,再执行flat函数。
flat
方法不支持IE浏览器。可选链运算符
嵌套属性需要判断是否存在,通过&&符号判断,使用可选链运算符.?就不用这样判断了
1
const name = obj?.name;
空值合并运算符
??
如果左侧是undefined或者null,返回右侧,可以应用在值判空上1
if((value??'') !== '')==if(value !== null && value !== undefined && value !== '')
浏览器对同一域名请求的最大并发连接量
在http1.1以下是可以有多个tcp连接,http2是取消了多个连接,一个tcp连接用多路复用实现数据的同时传输
IE10+,火狐,谷歌4+的最大并发连接数量是6个
http方法
Get和post的区别
在tcp/ip层面:get产生一个数据包,浏览器将header和data一起发送出去,资源存在服务器响应200
post产生两个数据包,浏览器先发送一个headers,服务器响应100 continue后再继续发送data,服务器响应200并且返回数据
五层协议
从应用层
http请求