javascript物件

javascript中物件佔有重要地位
學習到這通常也代表著要進入另一個學習階段

在javascript中,物件是賦予值的名稱之組合

// 物件是一群key:value組合而成的
let obj = {
    key1: "value1",
    key2: "value2",
    // 對應的值當然也可以是另一個名稱與值(另一個物件)
    key3: {
        key3_1: "value3_1",
        key3_2: "value3_2"
    },
    // 也可以對應函數,當函數在物件裡時,我們稱之為方法
    key4 : function(params) {
        console.log(params)
    }
}
// 要取到物件的值,可以用中括號或是.(dot)
console.log(obj.key1)  // value1
console.log(obj["key2"])  // value2
// 物件中的物件
console.log(obj.key3.key3_1)  // value3_1
// 物件方法
obj.key4("hello")  // hello

// javascript可以合法新增物件屬性
obj.key5 = "value5"
console.log(obj.key5)  // value5

json格式是網路傳輸的格式
物件與json格式很像
但他們不等於
json只是個資料”字串”
嚴格來說,json是物件的子集
比如說:json的key要包在引號福面

{
    "serverURL": "127.0.0.1",
    "APIURL": {
        "scan": {
            "URL": "/scan"
        }
    }
}

javascript有內建的方法可以快速的轉換物件及json
但不是物件一定可以轉成json
json則是一定可以轉成物件
如以下範例,obj中的key4是個funtion,就不能轉成json

console.log(JSON.stringify(obj))
// {"key1":"value1","key2":"value2","key3":{"key3_1":"value3_1","key3_2":"value3_2"},"key5":"value5"}
let jsonObj = JSON.parse(`{"key1":"value1","key2":"value2","key3":{"key3_1":"value3_1","key3_2":"value3_2"},"key5":"value5"}`)
console.log(jsonObj)
// { key1: 'value1',
//  key2: 'value2',
//  key3: { key3_1: 'value3_1', key3_2: 'value3_2' },
//  key5: 'value5' }

在javascript裡
函數就是物件
是一種特別的物件
函數有所有物件的特色
加上其它的特殊屬性
其中有2個重要的
一個是名稱(name): javacript的函數不一定會要有名稱(匿名函數就沒有名稱)
另一個是程式(code):就是函數的程式碼所在,呼叫的方式是(),所以在使用函數時,都會這樣使用functionName()。這就是在呼叫程式屬性!

記住函數就是物件~
可以跟物件一樣,被複製、移動、被傳入東西

function obj2(params) {
    console.log("this is obj2!")
}
console.log(obj2)  // [Function: obj2]

// 這樣是合法的
obj2.newKey = "obj2Value"
console.log(obj2)  // { [Function: obj2] newKey: 'obj2Value' }
// 函數多了一個屬性,就像物件一樣

想像函數只是程式碼的容器
它仍然是個物件
這個概念對之後理解this有幫助喔

佶曰:javascript的物件,裝的比真實世界還要多

發佈留言