JavaScript對象基礎(chǔ)

創(chuàng)建一個JavaScript對象的不同方式有哪些?

  • 構(gòu)造函數(shù)模式:像Object和Array這樣的原生構(gòu)造函數(shù),在運行時會自動出現(xiàn)在執(zhí)行環(huán)境中,此外我們也可以創(chuàng)建自定義的構(gòu)造函數(shù),從而定義自定義對象類型的屬性和方法
function student (name, age) {
  this.name = name;
  this.age = age;
  this.greeting = function() {
    console.log('Hi, I am ' + this.name);
  }
}
var obj = new student('Bob', 20);
  • new關(guān)鍵字創(chuàng)建一個Object的實例,再為它添加屬性和方法
var student = new Object();
student.name = 'Bob';
student.age = 20;
student.greeting = function() {
  console.log('Hi, I am ' + this.name);
}
  • 對象字面量
var student = {
  name: 'Bob',
  age: 20,
  greeting: function() {
    console.log('Hi, I am ' + this.name);
  }
}

基礎(chǔ)的創(chuàng)建對象的方式一般即為以上三種,其余方法為基礎(chǔ)方法之外的方法,現(xiàn)挑選部分方法羅列如下:

  • ECMASCRIPT 6 引入了新的關(guān)鍵字class來創(chuàng)建對象,此方法并沒有添加新的邏輯或內(nèi)容給javascript,只是對于習(xí)慣使用其他面向?qū)ο缶幊陶Z言的開發(fā)人員來說更為友好,例子如下:
class student {
  constructor(name, age) {
    this.name = name;
    this.age = age;

    this.greeting = function() {
      console.log('Hi, I am ' + this.name);
    }
  }
}
var student1 = new student('Bob', 20);
  • 利用Object.create()方法來創(chuàng)建對象
var student = {
  name: 'Bob',
  age: 20,
  greeting: function() {
    console.log('Hi, I am ' + this.name);
  }
}
var student2 = Object.create(student);
student2.name = 'Alice';
student2.age = 21;

如何添加/刪除屬性?

我們先來看一段代碼:

var student = {
  name: 'Bob',
  age: 20,
  greeting: function() {
    console.log('Hi, I am ' + this.name);
  }
}
delete student.age;
student.gender = 'Male';
console.log(student);

輸出結(jié)果為:

{ name: 'Bob', greeting: [Function: greeting], gender: 'Male' }

在上述代碼中,首先我們創(chuàng)建了一個名為student的對象,對應(yīng)有屬性nameage和方法greeting().
然后我們通過delete刪除了其中的一個屬性age,并且通過直接賦值的方式為其添加了一個屬性gender.

通過[].訪問/修改對象屬性的區(qū)別是什么?

首先明確一點,不論是通過[]還是.都可以順利的訪問和修改已經(jīng)定義過的對象的任何屬性,然而在某些場景下,這兩個還是有區(qū)別的。

  • 需要新添加一個屬性,該屬性名中含有空格
    假設(shè)還是前文提到的student對象,如果我們想要給他新增加一個屬性名為class number的屬性。如果此時我們想通過.的方式來增加屬性,則應(yīng)該寫為:

    student.class number = 2;//SyntaxError: Unexpected identifier
    

    很明顯此時會報錯。但如果我們使用[]的方式來添加,則沒有任何問題:

    student['class number'] = 2;
    
  • 需要新添加一個屬性,屬性名需要動態(tài)變化,舉例如下:

    for (var i=0; i<=4; i++) {
      myObject['prop' + i] = i;
    }
    

    在上述例子中,我們需要添加的屬性名的一部分包含一個變量,只能借由for循環(huán)和[]的方式添加。

    如何分別獲取對象中屬性和值?

    首先明確一點,對于JavaScriptd中的對象,我們可以認(rèn)為其是由鍵值對(key value pair)組成的,屬性名即為key,屬性值即為value.

    假設(shè)我們想單獨的提取出一個對象中的所有屬性或者屬性值,并存入對應(yīng)的數(shù)組中,應(yīng)該怎么做?我們只需要調(diào)用Object.keys()Object.values()即可。示例請看如下代碼:

    var student = {
    name: 'Bob',
    age: 20,
    greeting: function() {
      console.log('Hi, I am ' + this.name);
      }
    }
    var prop = Object.keys(student);
    var value = Object.values(student);
    console.log(prop);  //  輸出為  [ 'name', 'age', 'greeting' ]
    console.log(value); //  輸出為  [ 'Bob', 20, [Function: greeting] ]
    

如何遍歷對象的屬性和值?

在上一小節(jié)我們知道了如何分別獲取對象中的屬性和值,并且把他們存入了不同數(shù)組中。但在實際使用中,有時候我們并不需要把對象的屬性和值分別拿出來,而是需要遍歷處理。

那么如何進行遍歷處理呢?我們可以通過for in的語法去遍歷一個對象,舉例如下:

var fruit = {
  apple: 20,
  pear: 20,
  peach: 10
};
var totalNum = 0;
for (let fruitElem in fruit) {
  if (fruit.hasOwnProperty(fruitElem)) {
    totalNum = fruit[fruitElem] + totalNum;
  }
}
console.log(totalNum);

在此例中,我們有一個名為fruit的對象,我們做的是遍歷處理該對象,將對象所有屬性的值相加并且打印輸出。
在此需要注意的是,使用for in遍歷對象時, 需要使用hasOwnProperty過濾掉原型中的屬性,從而保證我們所處理的都是自己定義的屬性。

淺談JSON

聊到JavaScript對象,就不得不也同時聊一聊JSON.

首先,先看定義,JSON是一種輕量級的數(shù)據(jù)交換格式,全稱為JavaScript對象表示法(JavaScript Object Notation)。所以說我們其實可以把JSON看作是一種存儲數(shù)據(jù)的格式類型,或者說一種數(shù)據(jù)規(guī)范。

JSON這種數(shù)據(jù)格式用JS對象字面量的表示方法進行描述,那么描述JSON的語法就是JS對象字面量表示法語法的一個子集。但是于JavaScript不同的是,要注意JSON在描述屬性時,屬性需要用雙引號包含住,并且JSON描述的對象不能有任何方法存在。

他的本質(zhì)是文本文檔,只不過需要按照J(rèn)SON的格式書寫,并且其文件后綴為.json.

更多關(guān)于JSON的詳細(xì)介紹,請移步MDN官方的JSON使用簡介.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript對象就是一組屬性和方法(函數(shù))的集合。 創(chuàng)建對象字面量表示法:一個對象也需要用一個變量來存儲,...
    竹鼠不要中暑閱讀 865評論 0 0
  • 1. 什么是 Object 對象? JavaScript 中的所有事物都是對象,如:字符串、數(shù)值、數(shù)組、函數(shù)等,每...
    Gracee_flower閱讀 251評論 0 0
  • 對象是一個包含相關(guān)數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法) 創(chuàng)建一個對象通常先...
    咖A喱閱讀 245評論 0 0
  • JavaScript對象基礎(chǔ) Object是JavaScript中的一種基本數(shù)據(jù)類型,Object與其他六種基本數(shù)...
    LaobingFung閱讀 439評論 0 0
  • object 除了字符串,數(shù)字,true,false,null或者undefined以外,其他所有的值在JavaS...
    夏醬醬閱讀 282評論 1 0

友情鏈接更多精彩內(nèi)容