冻结一个对象或者一个数组,冻结的是对象本身
冻结后的对象或者数组不能被修改
不能添加新的属性 不能删除已有属性 不能修改已有属性的值
返回值是被冻结的对象本身,与被冻结的源对象完全一致,也被冻结
let obj = {
"name": "张三",
"age": 18,
"sex": '男'
}
let _obj = Object.freeze(obj)
console.log(_obj) // 返回值是被冻结的对象本身
// {name: "张三", age: 18, sex: "男"}
obj.name = "李四"
obj.school = "中南大学"
delete obj.sex
console.log(obj) // 不能修改、添加、删除已有属性的值
// {name: "张三", age: 18, sex: "男"}
console.log(_obj) // 返回值与被冻结的源对象完全一致
// {name: "张三", age: 18, sex: "男"}
_obj.age = 19
console.log(obj)
// {name: "张三", age: 18, sex: "男"}
console.log(_obj) // 返回值也被冻结
// {name: "张三", age: 18, sex: "男"}
let arr = ["zhangsan","lisi","wangwu"]
let _arr = Object.freeze(arr) // 可以冻结数组
console.log(_arr) // 返回值与原数组一致
// ["zhangsan", "lisi", "wangwu"]
arr[0] = "maliu"
arr[4] = "shengqi"
// arr.push("shengqi") // 会报错
console.log(arr) // 冻结后不可以修改、添加和删除
// ["zhangsan", "lisi", "wangwu"]
console.log(_arr)
// ["zhangsan", "lisi", "wangwu"]
_arr[1] = "yunba"
console.log(arr)
// ["zhangsan", "lisi", "wangwu"]
console.log(_arr); // 返回值也不可以修改、添加和删除
// ["zhangsan", "lisi", "wangwu"]
方法冻结的是对象或数组,如果其 属性 的 属性值 是数组(子)或者对象(子),可以修改数组(子)或对象(子)的属性值
let obj = {
name: "zhangsan",
interest: ["boll","book","music"]
}
let _obj = Object.freeze(obj)
obj.interest[2] = "food"
obj.interest.push("teach")
console.log(obj) // 可以修改数组(子)中的属性值,对象也是同理
// {name: "zhangsan", interest: ["boll", "book", "food", "teach"]}
console.log(_obj) // 浅拷贝
// {name: "zhangsan", interest: ["boll", "book", "food", "teach"]}