变量定义
let -- 变量声明(不存在变量提示)
const -- 常量声明
const在定义对象时虽然定义的是常量,并不可更改,但由于对象是引用类型的关系,所以改变了地址指向的值也不会报错
Object中 有freeze属性可以冻结对象中的直,但只是浅层次的,如果对象里套对象,那需要进行递归的freeze,即深冻结
let deepFreeze = (obj)=>{
Object.freeze(obj)
for(let i in obj){
if(obj.hasOwnProperty(i)){
if(typeof obj[i] === 'Object' ){
deepFreeze(obj[i])
}
}
}
}
结构赋值
看例子就能get到
let obj = {
name:"hello",
age:'18',
hobby:{
one:'摸鱼'
}
}
let {name , age, hobby :{one}} = obj;
// name 结构出来的值是hello
// age 是 18
// one 是摸鱼
//这里还可以更换命名
let {name:newName, age:newAge, hobby:{one:newOne}} = obj
// newName 结构出来的值是hello
// newAge 是 18
// newOne 是摸鱼
展开运算符
let obj = {name:'hello',age:18}
let newObj = {sex:'男',...obj}
// newObj == {sex:'男',name:'hello',age:18}
//函数中的argument 类数组参数也能展开
function test(...args){
//console.log(arguments)
console.log(args
}
新增的数据结构
// Map 本质上是键值对的集合
let map = new Map()
map.set("name","hello") //设置值 set(字段名,字段值)
map.has("name") // 判断是否有该字段 布尔值
map.size // 长度
map.delete("name") //删除方法
//遍历操作
map.key() //返回键名的遍历器
map.values() //返回键值的遍历器
map.entries() //返回所有成员的遍历器
//注意 只有对同一个对象的引用,Map结构才将其视为同一个键,
map.set(['a'],111)
map.get(['a']) // undefined
// WeakMap 结构与 Map 结构类似
// 区别有亮点: 1.只接受对象作为键名(null除外) 2.WeakMap的键名所指向的对象,不计入垃圾回收机制
// WeakMap 语法中 只有 get(),set(),has(),delete()可以用
// WeakMap 应用场景适用于 DOM节点作为键名,因为一但DOM节点被执行删除操作,那该状态就会自定消失
// Set 类似于数组,但他的成员值都是唯一的
// 写法1
let set = new Set([1,1,1,2,3,4,4,4])
console.log(set) // [1,2,3,4]
// 写法2
[...new Set([1,1,1,2,3,4,4,4])]
// 写法3
let set = new Set(),arr = [1,1,1,2,2,3,4,4,4]
arr.forEach(item=>{set.add(item)})
console.log(set) // [1,2,3,4]
//注意 add {}时 总是不相等的
// 实例下的属性
set.add(value) // 添加某个值,返回Set结构本身
set.delete(value) // 删除某个值,返回一个布尔值,表示是否删除成功
set.has(value) // 返回一个布尔值,表示该值是否为Set的成员
set.clear() // 清楚所有成员 没有返回值
// Array.form(new Set([1,2,3,4])) 可以将Set结构转为数组
// 遍历操作
set.key() //返回键名的遍历器
set.values() //返回键值的遍历器
set.entries() //返回键值对的遍历器
// WeakSet 与Set类似 也是不重复元素的集合,但有两个区别
// 1. WeakSet 的成员只能说对象,不能说其他类型的值
// 2. 垃圾回收机制不考虑WeakSet对该对象的引用,就是说再其他对象不在引用该对象是时垃圾回收机会自动回收该对象占用的内存,不考虑该对象还是否存在与WeakSet中
let ws = new WeakSet()
ws.add(value) //向WeakSet 添加一个新成员
ws.delete(value) // 清除WeakSet实例的指定成员
ws.has(value) // 返回布尔值 表示该WeakSet实例中是否有该值