聲明對象的兩種語法
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()