let命令
1.作用:声明变量
2.语法格式:
let num = 1
3.与
var
的不同:1.不存在变量提升:先声明再使用2.作用域:
{}
就是一个作用域,let
声明的变量只在当前作用域下生效3.暂时性死区:块其作用+先声明后使用
4.同一作用域内不允许重复声明
const命令
1.作用:声明常量
2.语法格式:
const PI = 3.14
-- 建议常量名使用大写3.特点:1.先声明再使用
2.不允许重复声明或赋值
3.常量必须在声明的同时赋值 -- 常量不允许重新赋值
4.锁zhan不锁堆
5.作用域
6.暂时性死区
扩展方法
1.查找字符串方法:
includes()
,startsWith()
,endsWith()
--indexOf()
,lastIndexOf()
2.填充字符串方法:
padStart()
,padEnd()
3.去除字符串空格方法:
trimStart()
,trimEnd()
--trim()
4.替换字符串方法:
replaceAll()
--replace()
5.获取字符串字符方法:
at()
--charAt()
6.重复字符串方法:
repeat()
扩展函数
1.
Array.from()
:将具备遍历器接口的对象转换为真数组2.
Array.of()
:将一组值转换为数组3.
copyWithin(target,start=0,end=arr.length)
:将数组从target
开始使用从start
开始到end-1
的元素替换,然后返回数组4.查找数组元素方法:
find()
:返回数组中第一个符合条件的元素
findIndex()
:返回数组中第一个符合条件的元素索引
includes()
:返回是否包含某个元素的布尔值5.
fill(val,start=0,end=arr.length)
:使用val
作为元素填充到数组的start
到end-1
的位置 -- 填充元素如果是引用类型,则会指向同一个地址6.返回遍历器对象用于遍历:
keys()
:返回的键
values()
:返回的值
entries()
:返回的键值对7.
flat(n=1)
:拉平n
层数组,可以使用Infinity
实现拉平任意层数组
flatMap()
:将数组的所有都执行一个函数后拉平 -- 只能拉平一层8.
at(index)
:获取数组中的某一个元素 --index
可以为负数,表示从末尾开始取值
扩展方法
1.
Object.is(val1,val2)
:比较两个值是否全等,行为基本与===
一致console.log(Object.is(0,-0)); //false console.log(0 === -0); //true console.log(Object.is(NaN,NaN)); //true console.log(NaN === NaN); //false2.
Object.assign(target,source1...)
:将源对象的可枚举属性拷贝到目标对象中 -- 如果属性已存在,会被覆盖3.
Object.setPrototypeOf(obj,proto)
:给obj
设置原型对象4.
Object.getPrototypeOf(obj)
:获取obj
的原型对象5.
Object.values()
:获取对象自身可枚举属性值组成的数组6.
Object.entries()
:获取对象自身可枚举属性和值组成的数组7.
Object.fromEntries()
:将键值对数组转换为对象
一、Symbol
1.新的原始数据类型,表示独一无二的值
2.声明:
//1.声明不重复的symbol let s = Symbol(); //不带描述的symbol let s = Symbol("description"); //带描述的symbol //2.声明可重复的symbol let s = Symbol.for(key); //key会注册成全局的值,当再次声明时,会全局查找是否已经存在相同的key,如果存在就应用之前的值;不存在则重新生成3.作用:给对象添加独一无二的属性 -- 对象的属性名:1.字符串 2.
Symbol
4.获取
Symbol
属性:Object.getOwnPropertySymbols()
5.获取描述:
s.description
6.获取
Symbol
声明时的key
:Symbol.keyFor()
二、Set和WeakSet
Set
1.定义:新的数据结构,类似数组,但是值是唯一的
2.声明:
1.声明一个空的set,然后追加数据 var s = new Set(); 2.声明一个带数据的set var s = new Set(arg); //arg必须具备遍历器接口3.实例属性:
size
:获取元素个数4.实例方法:1.
add()
:添加元素,并返回结构本身 -- 链式调用2.
delete()
:删除某个元素,返回布尔值3.
clear()
:清除所有成员,没有返回值4.
has()
:判断某个元素是否存在5.遍历方法:1.
keys(),values(),entries()
:通过for...of
循环2.
forEach()
3.
for...of
:Set
结构本身具备遍历器接口 -- 间接使用数组方法6.应用:1.数组去重
2.字符串去重
WeakSet
1.类似
Set
,值只能是对象,对象都是弱引用(其他地方不再引用对象,则该对象从结构中消失)2.声明:
//声明一个空的WeakSet let s = new WeakSet(); //声明一个带有值的WeakSet -- 参数必须具备遍历器接口并且值是对象 let s = new WeakSet([[],[]...]); let s = new WeakSet([{},{}...]);3.方法:
add()
,delete()
,has()
4.作用:用于存放临时对象
三、Map和WeakMap
Map
1.数据结构,类似
Object
,键可以是任意类型(对象的键只能是String
)注意:当键为对象时,保存的是对象的引用
2.声明:
1.声明一个空的Map let m = new Map; 2.声明一个带有属性的Map let m = new Map(arg); //参数是一个具备遍历器接口并且值为双元素的数据 -- 参数是值为双元素的具备遍历器接口的数据3.属性:
size
:获取成员个数4.方法:
set(key,val)
:设置成员并返回Map
结构
get(key)
:获取key
对应的值
has(key)
:返回键是否在当前Map
中
delete(key)
:删除某个键,返回布尔值
clear()
:清空Map
5.遍历:1.
keys()
,values()
,entries()
:通过for...of
遍历2.
forEach
3.
for...of
:本身具备遍历器接口6.与其他结构数据转换
1.Map转数组:let arr = [...map] 2.数组转Map:let map = new Map([[k,v],[k2,v2]...]) 3.Map转对象:遍历map,将map的键值依次添加到对象中 4.对象转Map:1.let map = new Map(Object.entries(obj)); 2.遍历对象,然后依次添加到map 5.Map转JSON:1.Map的键全为字符串:转成对象形式的json 2.Map的键包含对象:转成键值双元素的数组 6.JSON转Map:1.JSON为对象形式:JSON->对象->Map 2.JSON为数组形式:JSON->数组->Map
WeakMap
1.与
Map
类似,保存键值对的集合2.区别:1.只接收对象作为键名 -- 除
null
以外2.键名对象的引用为弱引用 -- 其他地方对键名对象的引用消失,那么
WeakMap
键对应的值也会消失3.声明:
var wm = new WeakMap() var wm = new WeakMap([ [{x:1},1] ])4.方法:
set()
,get()
,has()
,delete()