ES6知识点

let与const

let和const的作用域都是块级作用域,都不能重复声明,都不存在变量提升,在变量声明前使用会导致暂时性死区。两者的区别在于,let声明的是一个常量,声明时可以不赋值,声明后可以修改;const声明的是一个常量,声明时一定要赋值,声明后不能被修改。

const中保存的是变量指向的内存地址。对于基本数据类型而言,值就是指向内存地址中的数据,等同于常量。对于引用类型而言,const保存的是一个指向固定地址的指针。

因此如果const声明一个对象,对象是可以添加新属性的,声明一个数组也是可以通过push方法添加数据。要真正冻结对象,不允许重复赋值的话,使用Object.freeze方法。

image-20210223154557328

image-20210223154619836

冻结对象本身

const foo = Object.freeze({})

彻底冻结,包括属性

1
2
3
4
5
6
7
8
var constantize(obj)=>{
Object.freeze(obj);
Object.key(obj).forEach((key)=>{
if(typeof(obj[key]==='Object')){
constantize(obj[key])
}
})
}

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请求

查看评论