1. 程式人生 > >JS:Basic JavaScript入門(三)--JSON

JS:Basic JavaScript入門(三)--JSON

1. Accessing Objects Properties with Variables


中括號操作符的另一個使用方式是用變數來訪問一個屬性。當你需要遍歷物件的屬性列表或查表時,這種方式極為有用。

這有一個使用變數來訪問屬性的例子:

var someProp = "propName";
var myObj = {
  propName: "Some Value"
}
myObj[someProp]; // "Some Value"

還有更多:

var myDog = "Hunter";
var dogs = {
  Fido: "Mutt",
  Hunter: "Doberman",
  Snoopie: "Beagle"
}
var breed = dogs[myDog]; 
console.log(breed)// "Doberman"

提示:當我們通過變數名訪問屬性的時候,不需要給變數名包裹引號。因為實際上我們使用的是變數的值,而不是變數的名稱。

2. Add New Properties to a JavaScript Object


你也可以像更改屬性一樣給物件新增屬性。

看看我們是如何給ourDog新增 "bark"屬性:

ourDog.bark = "bow-wow";

或者

ourDog["bark"] = "bow-wow";

3. Delete Properties from a JavaScript Object


我們同樣可以刪除物件的屬性,例如:

delete ourDog.bark;

4. Using Objects for Lookups


物件和字典一樣,可以用來儲存鍵/值對。如果你的資料跟物件一樣,你可以用物件來查詢你想要的值,而不是使用switch或if/else語句。當你知道你的輸入資料在某個範圍時,這種查詢方式極為有效。

這是簡單的反向字母表:

var alpha = {
  1:"Z",
  2:"Y",
  3:"X",
  4:"W",
  ...
  24:"C",
  25:"B",
  26:"A"
};
alpha[2]; // "Y"
alpha[24]; // "C"

var value = 2;
alpha[value]; // "Y"

5. Testing Objects for Properties(重要)


有時檢查一個物件屬性是否存在是非常有用的,我們可以用**.hasOwnProperty(propname)**方法來檢查物件是否有該屬性。如果有返回true,反之返回 false。

舉例

var myObj = {
  top: "hat",
  bottom: "pants"
};
myObj.hasOwnProperty("top");    // true
myObj.hasOwnProperty("middle"); // false

6. Introducing JavaScript Object Notation JSON


JavaScript Object Notation 簡稱 JSON,它使用JavaScript物件的格式來儲存資料。JSON是靈活的,因為它允許 資料結構 是 字串,數字,布林值,字串,和 物件 的任意組合。

這裡是一個JSON物件的示例:

var ourMusic = [
  {
    "artist": "Daft Punk",
    "title": "Homework",
    "release_year": 1997,
    "formats": [ 
      "CD", 
      "Cassette", 
      "LP" ],
    "gold": true
  }
];

這是一個物件陣列,並且物件有各種關於專輯的 詳細資訊。它也有一個巢狀的 formats 的陣列。附加專輯記錄可以被新增到陣列的最上層。

提示
陣列中有多個 JSON 物件的時候,物件與物件之間要用逗號隔開。

7. Accessing Nested Objects in JSON


通過串聯起來的點操作符或中括號操作符來訪問JSON物件的巢狀屬性。

下面是一個巢狀的JSON物件:

var ourStorage = {
  "desk": {
    "drawer": "stapler"
  },
  "cabinet": {
    "top drawer": { 
      "folder1": "a file",
      "folder2": "secrets"
    },
    "bottom drawer": "soda"
  }
}
ourStorage.cabinet["top drawer"].folder2;  // "secrets"
ourStorage.desk.drawer; // "stapler"

8. Accessing Nested Arrays in JSON


正如我們在前面的例子所見,JSON物件可以巢狀物件和陣列。與訪問巢狀物件一樣,用中括號操作符同樣可以訪問巢狀陣列。

下面是如何訪問巢狀陣列的例子:

var ourPets = { 
  "cats": [
    "Meowzer",
    "Fluffy",
    "Kit-Cat"
  ],
  "dogs": [
    "Spot",
    "Bowser",
    "Frankie"
  ]
};
ourPets.cats[1]; // "Fluffy"
ourPets.dogs[0]; // "Spot"

9. Record Collection


右邊有一個JSON物件,代表著你的專輯集。每一張專輯由一個唯一的id標識,並具有多種屬性。但並非所有的專輯都有完整的資訊。

寫一個函式,它有個三個引數,id、prop、 value。

如果 value !=’’ 而且prop != ‘tracks’ ,collectionCopy[id][prop]=value;。

如果 value !=’’ 而且prop == ‘tracks’ ,collectionCopy[id][prop].push(value);。

如果 value == ‘’ ,delete collectionCopy[id][prop];。

記住:函式返回的永遠是整個物件。

10. Iterate with JavaScript For Loops


一個條件語句只能執行一次程式碼,而一個迴圈語句可以多次執行程式碼。

JavaScript 中最常見的迴圈就是“for迴圈”。

for迴圈中的三個表示式用分號隔開:

for ([初始化]; [條件判斷]; [計數器])

初始化語句只會在執行迴圈開始之前執行一次。它通常用於定義和設定你的迴圈變數。

條件判斷語句會在每一輪迴圈的開始執行,只要條件判斷為 true 就會繼續執行迴圈。當條件為 false的時候,迴圈將停止執行。這意味著,如果條件在一開始就為 false,這個迴圈將不會執行。

計數器是在每一輪迴圈結束時執行,通常用於遞增或遞減。

在下面的例子中,先初始化i = 0,條件 i < 5 為真,進入第一次迴圈,執行大括號裡的程式碼,第一次迴圈結束。遞增i的值,條件判斷,就這樣依次執行下去,直到條件判斷為假,整個迴圈結束。

var ourArray = [];
for (var i = 0; i < 5; i++) {
  ourArray.push(i);
}

最終 ourArray 的值為 [0,1,2,3,4].

11. Nesting For Loops


如果你有一個二維陣列,可以使用相同的邏輯,先遍歷外面的陣列,再遍歷裡面的子陣列。下面是一個例子:

var arr = [
  [1,2], [3,4], [5,6]
];
for (var i=0; i < arr.length; i++) {
  for (var j=0; j < arr[i].length; j++) {
    console.log(arr[i][j]);
  }
}

一次輸出 arr 中的每個子元素。提示,對於內部迴圈,我們可以通過 arr[i] 的 .length 來獲得子陣列的長度,因為 arr[i] 的本身就是一個數組。

12. Iterate with JavaScript While Loops


另一種型別的 JavaScript 迴圈被稱為while迴圈,因為它規定,當(while)條件為真,迴圈才會執行,反之不執行。

var ourArray = [];
var i = 0;
while(i < 5) {
  ourArray.push(i);
  i++;
}

13. Profile Lookup


我們有一個物件陣列,裡面儲存著通訊錄。

函式 lookUp 有兩個預定義引數:firstName值和prop屬性 。

函式將會檢查通訊錄中是否存在一個與傳入的 firstName 相同的聯絡人。如果存在,那麼還需要檢查對應的聯絡人中是否存在 prop屬性。

如果它們都存在,函式返回prop屬性對應的值。

如果firstName 值不存在,返回 “No such contact”。

如果prop 屬性不存在,返回 “No such property”。
在這裡插入圖片描述

14. Generate Random Fractions with JavaScript


計算機的行為只有兩種:確定性和隨機性。當你一步步地闖關來到這裡就是確定行為,當你隨意點了個連結就來到這裡就是隨機行為。

而隨機數最適合用來建立這種隨機行為。

Math.random()用來生成一個在0(包括0)到1(不包括1)之間的隨機小數,因此Math.random()可能返回0但絕不會返回1。

提示
隨後的函式都會在return執行前呼叫,所以我們可以直接返回Math.random()的值。

15. Generate Random Whole Numbers with JavaScript


生成隨機小數很棒,但隨機數更有用的地方在於生成隨機整數。

用 Math.random() 生成一個隨機小數。
把這個隨機小數乘以 20。
用 Math.floor() 向下取整 獲得它最近的整數。
記住 Math.random() 永遠不會返回 1。同時因為我們是在用 Math.floor() 向下取整,所以最終我們獲得的結果不可能有 20。這確保了我們獲得了一個在0到19之間的整數。

把操作連綴起來,程式碼類似於下面:

Math.floor(Math.random() * 20);

我們先呼叫 Math.random(),把它的結果乘以20,然後把上一步的結果傳給 Math.floor(),最終通過向下取整獲得最近的整數。

16. Generate Random Whole Numbers within a Range


我們之前生成的隨機數是在0到某個數之間,現在我們要生成的隨機數是在兩個指定的數之間。

我們需要定義一個最小值和一個最大值。

下面是我們將要使用的方法,仔細看看並嘗試理解這行程式碼到底在幹嘛:

Math.floor(Math.random() * (max - min + 1)) + min