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 :
  • Enam jenis data primitives, antara lain:
  • dan Object
  • 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.)
  1. Attributes of a data property
  1. Attribute
  1. Type
  1. Description
  1. Default value
  1. [[Value]]
  1. Any JavaScript type
  1. The value retrieved by a get access of the property.
  1. undefined
  1. [[Writable]]
  1. Boolean
  1. If false, the property's [[Value]] can't be changed.
  1. false
  1. [[Enumerable]]
  1. Boolean
  1. If true, the property will be enumerated in for...in loops.
  1. false
  1. [[Configurable]]
  1. Boolean
  1. If false, the property can't be deleted and attributes other than [[Value]] and [[Writable]] can't be changed.
  1. false
  1. Attributes of an accessor property
  1. Attribute
  1. Type
  1. Description
  1. Default value
  1. [[Get]]

  1. Function object or undefined
  1. 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.
  1. undefined
  1. [[Set]]
  1. Function object or undefined
  1. 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.
  1. undefined
  1. [[Enumerable]]
  1. Boolean
  1. If true, the property will be enumerated in for...in loops.
  1. false
  1. [[Configurable]]
  1. Boolean
  1. If false, the property can't be deleted and can't be changed to a data property.
  1. false
  1. Specification
  1. Status
  1. Comment
  1. Standard
  1. Initial definition.
  1. Standard
  1.  
  1. Standard
  1.  
  1. Draft
  1.  
  • 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:
  • 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:
  • "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 Value Range Size in bytes Description Web IDL type Equivalent C type
    Int8Array -128 to 127 1 8-bit two's complement signed integer byte int8_t
    Uint8Array 0 to 255 1 8-bit unsigned integer octet uint8_t
    Uint8ClampedArray 0 to 255 1 8-bit unsigned integer (clamped) octet uint8_t
    Int16Array -32768 to 32767 2 16-bit two's complement signed integer short int16_t
    Uint16Array 0 to 65535 2 16-bit unsigned integer unsigned short uint16_t
    Int32Array -2147483648 to 2147483647 4 32-bit two's complement signed integer long int32_t
    Uint32Array 0 to 4294967295 4 32-bit unsigned integer unsigned long uint32_t
    Float32Array 1.2x10-38 to 3.4x1038 4 32-bit IEEE floating point number ( 7 significant digits e.g. 1.1234567) unrestricted float float
    Float64Array 5.0x10-324 to 1.8x10308 8 64-bit IEEE floating point number (16 significant digits e.g. 1.123...15) 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
  • See also
  • Nicholas Zakas collection of common data structure and common algorithms in JavaScript.
  • Search Tre(i)es implemented in JavaScript

   

Tag Dokumen dan Kontributor

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