JS對象基本用法

與JS相關的七種數據類型以及五個falsy值

  • 七種數據類型 : number、string、bool、symbol、null、undefined、object
  • 五個falsy值 : null、undefined、0、NaN、''(空字符串)

原型

  • 每個對象都有原型
    原型里存著對象的共有屬性,比如obj的原型就是一個對象,obj.proto存著這個對象的地址,這個對象里有toString/constructor/valueOf等屬性
  • 對象的原型也是對象
    obj={}的原型即為所有對象的原型,這個原型包含所有對象的共有屬性,是對象的根,這個原型也有原型,是null

1、聲明對象的兩種語法

對象 : Object
定義 : 兩種定義方式

  • 無序的數據集合
  • 鍵值對的集合

作用 : 構造函數創建一個對象包裝器。

  • 如果該值為null或undefined,它將創建并返回一個空對象.
  • 否則,它將返回一個類型與給定值相對應的對象.
  • 如果該值已經是一個對象,它將返回該值.

寫法如下

let obj = {'name' : 'frank','age' : 18}
let  obj = new Object({'name': 'frank'})
console.log({'name' : 'frank','age':18})

細節

  • 鍵名是字符串,不是標識符,可以包含任意字符
  • 引號可以省略,省略之后就只能寫標識符
  • 就算引號省略了,鍵名也還是字符串

變量作屬性名

屬性值 : 每個value都是對象的屬性值
數姓名 : 每個key都是對象的數姓名(property)
擴展 : Object.keys(obj)可以得到obj的所有key

let  p1  =  'name'
let   obj  = {p1 : 'frank'}   //這樣寫的話,屬性名為p1
let   obj  = {[p1] : 'frank'}   //這樣寫的話,屬性名為'name'

對比來看

  • 不加[]的屬性名會自動變成字符串
  • 加了[]則會被當做變量求值
  • 值如果不是字符串,則會自動變成字符串

對象的隱藏屬性

  • JS中每一個對象都有一個隱藏屬性
  • 這個隱藏屬性儲存著其共有屬性組成的對象的地址
  • 這個共有屬性組成的對象叫做原型
  • 隱藏屬性儲存著原型的地址
var  obj  = {}
obj.toString()

沒有出現報錯的原因是因為obj的隱藏屬性對應的對象上有toString()

2、如何刪除對象的屬性

語法

delete  obj.xxx
或
delete  obj['xxx']
  • 即可刪除obj的xxx屬性

注 : 請區分[屬性值為undefined]和[不含屬性名]

不含屬性名

'xxx'  in  obj  ===  false

含有屬性名,但是值為undefined

'xxx'   in  obj  &&  obj.xxx  ===  undefined

注意

obj.xxx === undefined

不能斷定'xxx'是否為obj的屬性

3、如何查看對象的屬性

  • 查看自身所有屬性
Object.keys(obj)
  • 查看自身+共有屬性
console.dir(obj)
  • 判斷一個屬性是自身的還是共有的
obj.hasOwnProperty('toString')
注意
obj.name    等價于  obj['name']
obj.name  不等價于   obj[name]

因為這里的name是字符串,而不是變量

let   name  =  'frank'
obj[name]  等價于   obj['frank']

而不是 obj['name']和obj.name

4、如何修改或增加對象的屬性

1、修改或增加屬性(寫屬性)

  • 直接賦值
let   obj  =  {name : 'frank'}   //name是字符串
obj.name = 'frank'   //name是字符串
obj['name']  = 'frank'
obj['na'+'me'] = 'frank'
//
let key  = 'name';obj[key] = 'frank'
  • 批量賦值
Object.assign(obj,{age: 18, gender : 'man'})

2、修改或增加共有屬性

  • 無法通過自身修改或增加共有屬性
let  obj  = {}, obj2 = {}   //共有toString

obj.toString = 'xxx'  //只會在改obj自身屬性

obj2.toString   //還是在原型上

3、修改隱藏屬性

let  obj  =  Object.create(common)
obj.name  =  'frank'
let  obj2  =  Object.create(common)
obj2.name = 'jack'

5、'name' in obj和obj.hasOwnProperty('name')的區別

  • 'name' in obj : 查看name的屬性,但是并不能判斷出來是自身的還是共有的
  • obj.hasOwnProperty('name') : 可以判斷出來是自身的還是共有的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • JS的數據類型 數字(Number) 字符串(String) 布爾(Boolean) 符號(Symbol) 空(U...
    2b61575c37fd閱讀 313評論 0 0
  • 定義 無序的 鍵(key)值(value)對組合 聲明對象的方式 中括號語法:obj['key']----推薦點語...
    張德瘦嬢嬢閱讀 218評論 0 0
  • ? 1. 聲明對象的語法 對象定義 無序的數據集合(可以打亂順序) 鍵值對集合{'name'(屬性名)和'will...
    我是WilliamWang閱讀 550評論 0 0
  • 6種基本數據類型 null undefined string number boolean symobl 5種fa...
    WlSE閱讀 285評論 0 0
  • 1.聲明對象 定義:無序的數據集合、鍵值對的集合 寫法 屬性名:每個key都是對象的屬性名(property) 屬...
    fanison閱讀 153評論 0 0