一、let 和const
1.let:用来声明块级变量。var声明多的变量会出现作用域的提升(会出现变量的污染)
2.const:声明的常量必须要初始化
3.const:声明的对象:常对象
(1)可以修改对象的属性值,但不能修改对象本身
const obj = {
name:'张三',
age:25
}
obj.name = '李四' //正确的:修改对象的属性
obj = {} // 错误的:不能改变对象
(2)冻结对象:不能修改对象的属性。使用Object.freeze(对象名)
const obj = {
name:'李四',
age: 25
}
console.log(obj)
Object.freeze(obj) //冻结对象obj,就不能修改obj的属性
obj.name = '王五'
console.log(obj)
(2)冻结嵌套的对象
const p = {
name:'李四',
age: 25,
family:{
father:'李世民',
mother:'长孙皇后'
}
}
//定义一个冻结函数
function fun(obj){ //函数的参数是对象
//1.冻结对象:参数接收的对象
Object.freeze(obj)
//2.使用for...in循环遍历对象的属性
for(let key in obj){ //key = 'mother'
//2.1 hasOwnProperty用来判断对象是否包含给定的属性。typeyof用来判断数据类型
if(obj.hasOwnProperty(key) && typeof obj[key] === 'object'){// obj['mother'] -- string
fun(obj[key])
}
}
}
fun(p)
p.family.father = '李建成'
console.log(p)
hasOwnProperty(key)函数:判断key是否是对象的属性,若是返回true,不是返回false
二、冻结对象:Object.freeze(obj)
(1)遍历对象的属性:for…in
for(let k in obj){ }
三、构造函数
(1)作用:初始化对象(是对象的模型),所有的对象都是用这个模型造出来的
(2)this:指向由构造函数创建的对象(代表当前对象)
(3)对象:是属性和行为的结合体
属性:是对象的静态特征(成员变量)
行为:是对象的动态特征(函数 / 方法)