JavaScript——對象之初探

初探對象

(一)定義:

  • 無序的數據集合
  • 聲明方式:es6

    • let obj = new Object();
    • let obj = { };

(二)屬性名

  • Object.keys (obj):能夠獲得obj的全部屬性名
  • 變量做爲屬性名:
let a='name'
var obj = {    a: jack;    //屬性名爲'a'}
var obj2 = {    [a]: jack; //屬性名爲'name'}
  • 對比:不加[]的屬性名會自動變成字符串;反之則會當成變量求值;值若是不是字符串則自動轉換爲字符串

(三)對象的隱藏屬性

  • JS中每個對象都有一個隱藏屬性
  • 這個隱藏屬性儲存這個對象的共有屬性組成的對象的地址
  • 這個共有屬性組成的對象就叫作原型。
  • 也就是說隱藏屬性儲存原型的地址。
  • 由於原型實際上是共有屬性組成的對象,因此原型也是一個對象,因此原型也有它的原型。

(四)屬性的增刪改查

1)刪除

  • delete obj.xxx:刪除obj中的xxx屬性
  • 'xxx' in obj:若xxx在obj中返回true,不然返回false
  • obj.xxx === undefined prototype

    • 結論:不能證實xxx是否爲obj的屬性
    • 緣由:xxx屬性可能不存在,或者xxx屬性存在可是值爲undefined

2)查看

  • Object.keys(obj):查看自身全部屬性名code

    • Object.values(obj):查看自身全部屬性值
    • Object.entries(obj):查看全部屬性和值
  • console.dir(obj):以目錄形式查看自身+共有屬性
  • 判斷一個屬性是不是自身的屬性(非共有屬性):obj.hasOwnProperty('xxx')
  • 查看屬性對象

    • obj.xxx
    • obj['xxx']:與第一種等價
    • obj[xxx]:xxx爲變量,與上述兩種徹底無關

一道代碼題區分開上述三種狀況:字符串

let list = ['name', 'age', 'gender']
        let person = {
            name: 'frank', age: 18, gender: 'man'
        }
        for (let i = 0; i < list.length; i++) {
            let name = list[i]
            console.log(???) // 這裏 ??? 替換成什麼使person全部屬性被打印出來
        }
        // 1.console.log(person.name) 2.console.log(person[name])
        // 答案:console.log(person[name])

3)增改

  • 直接賦值:obj.name="xxx";
  • 批量賦值:
//es6新增語法,推薦使用
Object.assign(obj,{ name: xxx, age: xxx , gender: xxx })
  • 沒法經過自身修改或修改原型:原型

    • obj.toString='xxx';只會做用在obj自身屬性上
  • 修改原型:console

    • 修改obj.__proto__:不推薦
    • 必需要修改能夠用Object.prototype
  • 將一個對象的原型設置爲另外一個對象:變量

    1. let obj2.__proto__ = obj (不推薦)
    2. let obj2 = Object.create( obj ) :推薦,es6新寫法,效果等同於第一種、
    3. create配合assign建立對象

4)一些問題

  • 'x' in objobj.hasOwnProperty('x')的區別:語法

    • 'xxx' in obj只能檢查xxx是否在obj中而沒法區分是不是自身屬性
    • 相反地obj.hasOwnProperty()能夠對自身屬性進行區分並返回true,非自身屬性返回false
  • Object.create和new Object()的區別:
// a中的name爲原型中的屬性
var a = Object.create ({ name: 'A' });
    //b中的name爲自身的屬性
var b = new Object ({ name:'A' })
相關文章
相關標籤/搜索