BelajarDev merupakan bagian dari eksperimen Muhammad Ikhsan di Smartech Studios.
JavaScript Data Type — Referensi Singkat dan Cukup Lengkap
Nilai (Values)
Nilai adalah representasi data yang bisa disimpan, dimanipulasi, dan dikirim.
Variable
Variable adalah binding ke sebuah nilai.
let x = 10;
x = 20;
Karakteristik:
- Dideklarasikan dengan
letatauvar - Bisa di-reassign
- Scope:
let: block scopevar: function scope
Constant
Constant adalah variable yang tidak bisa di-reassign.
const PI = 3.14;
Catatan penting:
- Binding-nya immutable, tapi value-nya bisa mutable (untuk object)
const obj = { a: 1 };
obj.a = 2; // valid
Data Type (Primitive & Non-Primitive)
JavaScript memiliki dua kategori utama:
Primitive Types
stringnumberbooleanundefinednullsymbol(tidak dibahas di sini)bigint(tidak dibahas di sini)
Karakteristik:
- Immutable
- Disimpan langsung sebagai nilai
- Dibandingkan berdasarkan value
Non-Primitive (Reference Types)
objectfunction(sebenarnya object)
Karakteristik:
- Mutable
- Disimpan sebagai referensi
- Dibandingkan berdasarkan reference
Primitive Data Type
string
Representasi teks.
let name = "Ikhsan";
Karakteristik:
- Immutable
- Mendukung indexing
Operasi:
name.length
name.toUpperCase()
number
Representasi angka (integer & floating point).
let n = 10;
let pi = 3.14;
Catatan:
- Semua number di JavaScript adalah floating point (IEEE 754)
boolean
let isActive = true;
Digunakan untuk:
- kondisi
- kontrol alur
undefined
Nilai default ketika variable belum diberi nilai.
let x;
console.log(x); // undefined
null
Representasi "tidak ada nilai", berbeda dengan undefined "belum diberi nilai"
let x = null;
Catatan:
- null termasuk primitive data type
- Namun,
typeof null === "object"→ merupakan historical bug yang tidak bisa di-fix karena akan merusak terlalu banyak script.
Built-in Objects
JavaScript menyediakan berbagai object bawaan:
String (Object)
new String("hello");
Jarang digunakan secara eksplisit.
Number (Object)
new Number(10);
Boolean (Object)
new Boolean(true);
Object
Struktur data key-value.
let obj = {};
let user = {
name: "Ikhsan",
age: 30
};
Function
Function adalah first-class object yang callable (bisa dipanggil).
function fn() {}
function greet() {
return "Hello";
}
Karakteristik:
- Bisa disimpan di variable
- Bisa dikirim sebagai argumen
- Bisa mengembalikan function
Date
let now = new Date();
RegExp
let pattern = /abc/;
Array
let arr = [1, 2, 3];
Karakteristik:
- Ordered
- Mutable
Error
throw new Error("Something went wrong");
Bekerja dengan Nilai dan Tipe Data
1. Representasi
- Primitive → langsung sebagai nilai
- Object → sebagai reference (pointer)
let a = 10;
let b = a; // copy value
let obj1 = { x: 1 };
let obj2 = obj1; // copy reference
2. Karakteristik
| Tipe | Mutable | Dibandingkan |
|---|---|---|
| Primitive | Tidak | Value |
| Object | Ya | Reference |
3. Behaviour
Contoh perbedaan:
let a = 10;
let b = 10;
a === b; // true
let x = {};
let y = {};
x === y; // false
4. Mengecek Tipe
typeof
typeof "hello"; // string
typeof 10; // number
typeof true; // boolean
typeof undefined; // undefined
typeof {}; // object
typeof null; // object (bug)
instanceof
[] instanceof Array; // true
Array.isArray
Array.isArray([]);
5. Mendefinisikan
let str = "text";
let num = 10;
let bool = true;
let obj = {};
let arr = [];
let fn = () => {};
6. Representasi Internal (Konseptual)
- Primitive disimpan langsung di stack
- Object disimpan di heap, variable menyimpan reference
Ini merupakan model konseptual, bukan implementasi spesifik engine
7. Konversi Tipe (Type Conversion)
Implicit (Coercion)
"5" + 1; // "51"
"5" - 1; // 4
Perlu hati-hati, karena JavaScript dapat melakukan konversi tipe data secara implisit seperti contoh di atas.
Explicit
Number("10");
String(10);
Boolean(0); // false
8. Truthy & Falsy
Falsy:
false0""nullundefinedNaN
Truthy:
- selain di atas
9. Operasi
Arithmetic
+ - * / %
Comparison
== // loose
=== // strict
Gunakan:
===
Logical
&&
||
!
Object Operations
obj.key
obj["key"]
delete obj.key
Array Operations
arr.push(1);
arr.pop();
arr.map(x => x * 2);
10. Equality & Identity
0 == false; // true
0 === false; // false
Rekomendasi:
- Hindari ==
- Gunakan ===