声明对象的两种语法
let obj = {
'name' : '这是一个对象'
}
let obj = new Object({
'name' : '这是一个对象'
})
1. key是字符串的情况:
key是字符串,上面的例子中name就是那个key,哪怕我没写引号,它也会自动变成字符串。
在没有加引号的情况下,如果key的值是可以计算的,它会先计算然后再转为字符串。这很烦,所以如果不是必须的,一定要记得给key加引号。
2. key是变量的情况:
let a = "name"
let obj = {
[a]: '这是一个对象'
}
用中括号把变量名括起来就可以了,这样就会先计算括号里的变量值
3. key是symbol的情况:
let a = Symbol()
let obj = {
[a]: '这是一个对象'
}
如何删除对象的属性
let 教室 = {
'学生': 45,
'老师': 1,
'课桌':true,
'凳子' : true,
'窗户': true,
'优秀班级': false,
}
删除学生、老师、优秀班级属性
教室.学生 = undefined//删除属性值
delete 教室.老师//删除属性
delete 教室.优秀班级//删除属性
如何查看对象的属性
Object.keys(教室)
Object.values(教室)
Object.entries(教室)
如果还需要查看共有属性可以使用:
console.dir(教室)
或者,直接打印:
console.log(教室.__proto__)
如何判断属性是不是对象的:
我们可以用下面这种方法,但是这种方法没办法知道这个属性是对象自己的还是原型的
'name' in obj//没办法知道这个属性是自己的还是原型的
hasOwnProperty()方法可以帮助判断这个属性是不是对象自己的:
教室.hasOwnProperty('toString')
查看单个属性值
教室.学生
教室['老师']
如何修改或增加对象的属性
- 通过取值的方式直接赋值
教室.优秀班级 = false
教室['优秀班级'] = true
- 批量赋值
Object.assign(教室,{扫帚:true,拖把:true,水桶:true})
- 共有属性能改么?
教室.toString = "修改1?"
”没有修改”,读的时候可以读到共有属性,但是写的时候只能写在自己身上。
实在想改,就要去原型上改:
我.__proto__.toString = "修改2?"
"修改成功,但不推荐"!
'name' in obj和obj.hasOwnProperty('name') 的区别
- hasOwnProperty 方法用于判断对象“自身”是否有某个属性:
- in 用于判断对象“自身”及其“继承对象”是否具有某个属性:
let obj = {a:1,b:2};
控制台查看:

obj.hasOwnProperty('__proto__') // false
obj.hasOwnProperty('valueOf') // false
'__proto__' in obj // true
'valueOf' in obj // true
应用:
可以判断一些新属性和方法是否支持:如下
- 想判断浏览器是否支持“proto"属性 // ‘proto’ in {}
2.判断浏览器是否支持“bind”方法 // "bind" in new Function()
网友评论