Objek adalah tipe data diskrit
dengan cara yang sama seperti
primitif adalah jenis data, dengan satu
perbedaan: tidak seperti primitif, objek bersifat dapat diubah. Sebuah objek dapat berisi data
yang terkait dengan ID, seperti variabel, tetapi mempertahankan data object
-nya
mengetik apa pun data di dalamnya.
Selain primitif, semua nilai JavaScript adalah objek, meskipun karena literal primitif menunjukkan perilaku seperti objek karena pewarisan prototipe, sering mengatakan bahwa JavaScript secara efektif terdiri dari objek.
Literal objek adalah sepasang tanda kurung kurawal yang mengelilingi nol atau beberapa nilai kunci pasangan yang disebut "properti", yang dapat berisi nilai JavaScript apa pun.
{
"myProperty" : true
}
Kunci properti dapat berupa simbol atau string. Seperti saat menetapkan ID ke suatu variabel, {i>string<i} yang digunakan sebagai kunci properti harus dapat diprediksi dan deskriptif:
let carAttributes = {
"color" : "red"
};
carAttributes
> Object { color: "red" }
Kunci properti memerlukan literal string tunggal ('
) atau tanda kutip ganda ("
), bukan
literal template:
let carAttributes = {
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal
Nilai properti dapat berupa jenis data apa pun. Properti objek dapat sendiri berisi objek dengan propertinya sendiri:
let myObject = {
'key' : {
'subkey' : true,
'othersubkey' : false
}
};
myObject;
> Object { key: Object { subkey: true, othersubkey: false } }
Jika nilai properti adalah fungsi, properti tersebut disebut "metode".
const myObject = {
"myProperty" : true,
myMethod() {
console.log( "This is a method." );
}
}
myObject.myProperty;
> true
myObject.myMethod();
> "This is a method."
Anda juga dapat membuat objek menggunakan kata kunci new
:
let myObject = new Object();
Dalam contoh sebelumnya, literal objek yang baru dibuat telah ditetapkan
pada variabel. Hal ini tidak diperlukan, karena seperti jenis data lainnya, Anda dapat menggunakan
sebuah objek tanpa pengidentifikasi
di mana pun sebuah objek diharapkan. Namun,
literal objek membutuhkan tanda kurung dalam konteks apa pun yang bisa membingungkan
untuk pernyataan blok, mengingat keduanya menggunakan sintaksis kurung kurawal yang sama ({}
).
Inisialisasi variabel tidak pernah memerlukan hal ini.
{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'
({ "value" : 2 })
> Object { value: 2 }
let valObj = { "value" : 2 };
valObj;
> Object { value: 2 }
Tidak seperti primitif, tidak ada perbedaan yang berarti dalam hasil pembuatan
objek menggunakan new Object()
dan membuat literal objek, karena
hasil dalam kedua kasus tersebut akan menjadi objek dengan properti yang diwarisi dari
Prototipe Object
. Namun, ada satu perbedaan praktis antara keduanya
sintaksis.
Kata kunci new
harus menentukan objek kosong yang akan diisi dengan data nanti:
let myObject = new Object();
myObject.booleanValue = true;
myObject.stringValue = "My string.";
Literal objek dapat diisi dengan data saat dibuat:
let myObject = {
'booleanValue' : true,
'stringValue' : "My string."
};
Meskipun memiliki sedikit penggunaan praktis, new Object()
dapat digunakan untuk mengubah
nilai data ke dalam Objek sesuai tipenya masing-masing, seperti yang ditampilkan dengan
kata kunci new
beserta konstruktornya
. Misalnya, berikut ini secara fungsional setara dengan
new Number( 10 )
:
let myObject = new Object( 10 );
myObject;
> Number { 10 }
Nilai null
dan undefined
menghasilkan objek kosong yang identik secara fungsional
untuk memanggil new Object()
tanpa memberikan argumen.
Meneruskan literal objek ke new Object()
sebagai argumen akan meneruskan objek
tanpa mengubahnya:
let myObject = new Object( { myValue : 10 } );
myObject;
> Object { myValue: 10 }
Seperti halnya menggunakan konstruktor untuk nilai primitif, menggunakan konstruktor untuk objek jarang memiliki manfaat apa pun dibandingkan menggunakan notasi literal objek. Bahkan saat membuat konten objek kosong untuk diisi nanti dengan nilai, pengembang cenderung lebih menyukai objek notasi literal agar lebih sederhana.
Menguji pemahaman Anda
Jenis notasi apa yang dapat Anda gunakan untuk menetapkan properti objek?
Manakah dari berikut ini yang merupakan sintaks yang benar untuk mendapatkan nilai
dari myProp
myObj("myProp");
myObj{"myProp"};
myObj["myProp"];