Objek

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?

Notasi titik
Notasi kurung
Notasi garis
Notasi periode

Manakah dari berikut ini yang merupakan sintaks yang benar untuk mendapatkan nilai dari myProp

myObj{"myProp"};
myObj["myProp"];
myObj("myProp");