MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Terjemahan ini belum lengkap. Mohon bantu menerjemahkan artikel ini dari Bahasa Inggris.

Semua bahasa pemrograman memiliki struktur data built-in, namun seringkali berbeda antara satu bahasa dengan bahasa lainya. Artikel ini mencoba untuk membuat daftar struktur data built-in yang tersedia di JavaScript dan sifat-sifat apa saja yang mereka miliki; ini dapat digunakan untuk membangun struktur data lainnya. Bila memungkinkan, perbandingan dengan bahasa lainya akan diambil.

Jenis Dinamis

JavaScript adalah salah satu bahasa pemrograman yang tidak mengutamakan jenis data. Maksudnya anda tidak perlu mendeklarasikan jenis data dari suatu peubah setiap waktu. Jenis data akan dideklarasikan secara otomatis diawal program dijalankan. Dengan kata lain anda dapat menggunakan nama peubah yang sama dengan jenis data yang berbeda:

var foo = 17;    // sekarang jenis foo adalah Angka
var foo = "bar"; // sekarang jenis foo adalah String
var foo = true;  // sekarang jenis foo adalah Boolean

Jenis Data

Ada tujuh jenis data pada Standar ECMAScript sekarang ini :

Nilai Primitif

Selain jenis Objek, semua jenis data mendefinisikan nilai immutable (nilai yang tidak berubah selama program berjalan). Contoh dan tidak seperti pada bahasa C, String adalah nilai immutable. Kami menyebut semua nilai seperti contoh tersebut adalah "Nilai Primitif"

Jenis Boolean

Boolean melambangkan entitas logika dan hanya memiliki dua nilai, yaitu true, dan false.

Jenis Null

Null hanya memiliki satu nilai: null. Untuk lebih jelasnya lihat null dan Null.

Jenis Undefined

Sebenarnya sebuah peubah yang tidak didefinisikan memiliki nilai undefined. Untuk lebih jelasnya lihat undefined dan Undefined

Jenis Angka

Menurut Standar ECMAScript, hanya ada satu jenis angka, yaitu nilai double-precision 64-bit binary format IEEE 754 (angka antara -(253 -1) and +(253 -1)). Tidak ada spesifikasi jenis angka integer. Selain mampu merepresentasikan floating-point (bilangan pecahan) jenis ini juga memiliki tiga nilai simbolik, yaitu: +Infinity, -Infinity, dan NaN (not-a-number / bukan angka).

Untuk memeriksa nilai angka antara +Infinity dan -Infinity, anda dapat menggunakan nilai konstanta Number.MAX_VALUE untuk nilai Tertinggi dan Number.MIN_VALUE untuk nilai Terendah dan mulai dari standar ECMAScript 6, anda juga dapat memeriksa jarak angka jika angka tersebut adalah double-precision floating point menggunakan Number.isSafeInteger() sama saja seperti Number.MAX_SAFE_INTEGER dan Number.MIN_SAFE_INTEGER. Pada JavaScript, angka yang bernilai diluar rentang tersebut sudah tidak aman.

Nol

Nol adalah Jenis angka yang hanya punya satu bilangan bulat dan memiliki dua representasi, antara lain : +0 dan -0. ( String "0" adalah nama lain dari +0). Dalam penerapannya, angka ini hampir dan bahkan tidak berdampak jika kedua representasi tersebut dibandingkan. Contohnya +0 === -0 menghasilkan nilai true. Namun saat menjadi pembagi dan kedua hasilnya dibandingkan (divide by zero), akan menghasilkan nilai false. Perhatikan kode berikut:

> +0 === -0
true  // 0 === 0

> (17 / +0) === (17 / -0)
false // Infinity === -Infinity

Meskipun angka hanya mewakili nilai, JavaScript menyediakan beberapa operator biner. Operator tersebut dapat digunakan untuk mewakili beberapa nilai Boolean dalam nomor tunggal menggunakan teknik bit masking. Hal ini biasanya dianggap sebagai praktek yang buruk, namun, JavaScript tidak menawarkan cara lain untuk mewakili satu set Booleans (seperti sebuah array dari boolean atau objek dengan nilai-nilai Boolean ditugaskan untuk properti bernama). Bit masking juga cenderung untuk membuat kode lebih sulit untuk dibaca, dipahami, dan dirawat. Mungkin dapat diterapkan jika memang terpaksa, seperti ketika mencoba untuk mengatasi keterbatasan penyimpanan lokal atau dalam kasus yang ekstrim saat membaca setiap bit dalam perhitungan jaringan. Teknik ini dapat digunakan jika memang tidak ada cara lain untuk mengoptimalkan ukuran.

Jenis String

String pada JavaScript digunakan untuk merepresentasikan teks atau tulisan. Jenis ini terdiri dari beberapa elemen bernilai 16-bit unsigned integer. Setiap elemen dalam string menempati posisi pada String. Elemen pertama berada di index ke-0, elemen selanjutnya di index ke-1, dan seterusnya. Panjang string adalah jumlah elemen pada string tersebut.

Tidak seperti bahasa C, String pada JavasSript bersifat tetap. Maksudnya sekali string dibuat, maka tidak mungkin untuk mengubahnya. Namun dapat di-akali dengan membuat string lain berdasar pada operasi string aslinya. Contohnya seperti berikut:

  • Memotong string awal dengan mengambil beberapa huruf menggunakan String.substr().
  • Menggabungkan dua string dengan menggunakan operator penggabung (+) atau String.concat().

Beware of "stringly-typing" your code!

Memungkinkan penggunaan string untuk merepresentasikan data yang rumit. Memberikan manfaat dalam penerapannya, antara lain:

  • Mudah untuk membangun string yang rumit dengan concatenation (penggabungan string).
  • String sangat mudah untuk debug (apa yang anda lihat saat cetak adalah apa yang ada di string).
  • String juga salahsatu bahan dasar pengolah API (input fields, isi untuk penyimpanan lokal, isi dari XMLHttpRequest saat menggunakan responseText, dan sebagainya.)

Dengan ketentuan, anda juga dapat  merepresentasikan semua struktur data menggunakan string. Hal ini memang bukan cara yang bagus. Misalnya dengan pemisah, anda dapat membuat untaian (mirip seperti JavaScript array). Kadang jika karakter yang digunakan adalah bagian dari pemisah, maka untaian tersebut akan rusak. Dalam hal ini anda juga dapat menggunakan escape character. Semua ini membutuhkan ketentuan dan membuat masalah pemeliharaan yang tidak perlu.

Gunakan string untuk data kenaskahan. Saat merepresentasikan data yang rumit, bentuk string dan gunakan abstraksi yang tepat.

Jenis Symbol

Symbol adalah jenis data baru di Standar JavaScript ECMAScript Edition 6. Symbol bersifat unik dan nilai primitif immutable juga memungkinkan digunakan untuk properti Objek (lihat definisi dibawah). Di sebagian bahasa pemrogramman, Symbol dijuluki sebagai atoms. Anda juga dapat membandingkannya dengan enumerations (enum) pada bahasa C. Untuk lebih jelasnya lihat Symbol dan Symbol Object wrapper pada JavaScript.

Objek

Dalam ilmu komputer, sebuah objek adalah nilai di dalam memori yang mungkin dirujuk oleh identifier.

Properties

In JavaScript, objects can be seen as a collection of properties. With the object literal syntax, a limited set of properties are initialized; then properties can be added and removed. Property values can be values of any type, including other objects, which enables building complex data structures. Properties are identified using key values. A key value is either a String or a Symbol value.

There are two types of object properties which have certain attributes: The data property and the accessor property.

Data property

Associates a key with a value and has the following attributes:

Attributes of a data property
Attribute Type Description Default value
[[Value]] Any JavaScript type The value retrieved by a get access of the property. undefined
[[Writable]] Boolean If false, the property's [[Value]] can't be changed. false
[[Enumerable]] Boolean If true, the property will be enumerated in for...in loops. false
[[Configurable]] Boolean If false, the property can't be deleted and attributes other than [[Value]] and [[Writable]] can't be changed. false

Accessor property

Associates a key with one or two accessor functions (get and set) to retrieve or store a value and has the following attributes:

Attributes of an accessor property
Attribute Type Description Default value
[[Get]] Function object or undefined The function is called with an empty argument list and retrieves the property value whenever a get access to the value is performed. See also get. undefined
[[Set]] Function object or undefined The function is called with an argument that contains the assigned value and is executed whenever a specified property is attempted to be changed. See also set. undefined
[[Enumerable]] Boolean If true, the property will be enumerated in for...in loops. false
[[Configurable]] Boolean If false, the property can't be deleted and can't be changed to a data property. false

"Normal" objects, and functions

A JavaScript object is a mapping between keys and values. Keys are strings and values can be anything. This makes objects a natural fit for hashmaps.

Functions are regular objects with the additional capability of being callable.

Dates

When representing dates, the best choice is to use the built-in Date utility in JavaScript.

Indexed collections: Arrays and typed Arrays

Arrays are regular objects for which there is a particular relationship between integer-key-ed properties and the 'length' property. Additionally, arrays inherit from Array.prototype which provides to them a handful of convenient methods to manipulate arrays. For example, indexOf (searching a value in the array) or push (adding an element to the array), etc. This makes Arrays a perfect candidate to represent lists or sets.

Typed Arrays are new to JavaScript with ECMAScript Edition 6 and present an array-like view of an underlying binary data buffer. The following table helps you to find the equivalent C data types:

TypedArray objects

Type Size in bytes Description Web IDL type Equivalent C type
Int8Array 1 8-bit two's complement signed integer byte int8_t
Uint8Array 1 8-bit unsigned integer octet uint8_t
Uint8ClampedArray 1 8-bit unsigned integer (clamped) octet uint8_t
Int16Array 2 16-bit two's complement signed integer short int16_t
Uint16Array 2 16-bit unsigned integer unsigned short uint16_t
Int32Array 4 32-bit two's complement signed integer long int32_t
Uint32Array 4 32-bit unsigned integer unsigned long uint32_t
Float32Array 4 32-bit IEEE floating point number unrestricted float float
Float64Array 8 64-bit IEEE floating point number unrestricted double double

Keyed collections: Maps, Sets, WeakMaps, WeakSets

These data structures take object references as keys and are introduced in ECMAScript Edition 6. Set and WeakSet represent a set of objects, while Map and WeakMap associate a value to an object. The difference between Maps and WeakMaps is that in the former, object keys can be enumerated over. This allows garbage collection optimizations in the latter case.

One could implement Maps and Sets in pure ECMAScript 5. However, since objects cannot be compared (in the sense of "less than" for instance), look-up performance would necessarily be linear. Native implementations of them (including WeakMaps) can have look-up performance that is approximately logarithmic to constant time.

Usually, to bind data to a DOM node, one could set properties directly on the object or use data-* attributes. This has the downside that the data is available to any script running in the same context. Maps and WeakMaps make easy to privately bind data to an object.

Structured data: JSON

JSON (JavaScript Object Notation) is a lightweight data-interchange format, derived from JavaScript but used by many programming languages. JSON builds universal data structures. See JSON and JSON for more details.

More objects in the standard library

JavaScript has a standard library of built-in objects. Please have a look at the reference to find out about more objects.

Determining types using the typeof operator

The typeof operator can help you to find the type of your variable. Please read the reference page for more details and edge cases.

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
The definition of 'Types' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'ECMAScript Data Types and Values' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'ECMAScript Data Types and Values' in that specification.
Draft  

See also

Tag Dokumen dan Kontributor

Tag: 
 Kontributor untuk laman ini: dinugr, fadlystwn, witart
 Terakhir diperbarui oleh: dinugr,