Seperti bahasa pemrograman lainnya, Javascript juga punya type data primitf. Ada beberapa type data primitif di Javascript
1. null
2. undefined
3. string
4. number
5. boolean
6. symbol (baru ada di Ecmascript 2015)

Yaap..Javascript punya tipe data primitif...Tapi dibelakang layar, Javascript engine menyiapkan akses ke berbagai Methods/fitur di built-in Object sesuai dengan tipe nya. 

Contoh

let name = "Agus";

Diatas adalah tipe data primitif string..tapi dibelakang layar, Javascript
menyediakan spesial object/copy-an dari variable name yang punya akses ke semua fungsionalitas built-in String() karena tipenya adalah string.

Oleh karena itu maka variable name diatas akan punya akses ke fungsi/method seperti:

name.toUpperCase(); // AGUS
name.toLowerCase(); // agus

Contoh lagi. 

let age = 20;

variable age adalah primitif integer, dan integer adalah Number.
jadinya Javascript membuat spesial object/copy-an dari variable age
dan terhadap spesial object tadi, lalu menyediakan fungsionalitas dari built-in Number(), makanya ia akan punya akses ke fungsi seperti

age.toFixed(2); // 20.00

untuk melihat apa saja method-method yang dibukain aksesnya, cek saja lewat browser console

console.dir(name.__proto__);
console.dir(age.__proto__);

Kok proto? yaap sebenya mekanismenya sama kaya prototypal inheritance, tapi khusus untuk tipe data primitif, spesial object/copy-an nya segera di destroy dari memory oleh garbage collector

Apasih spesial Object ? , itu mekanisme invisble alias gak kelihatan yang bertugas sebagai "temporary" object yang bisa mewarisi method/fungsi dari Object parent nya. Contoh lagi dah...

let nama = "Budi";

Saat kita buat variable nama = "budi", javascript akan buatkan temporary object dengan value "budi".  katakanlah misalnya: [temporary] = "budi", dan ternyata tipe nya adalah string, oleh karena itu si [temprorary] akan mewarisi semua fungsionalitas dari String() atau dengan kata lain si [temprorary] itu mewarisi protototype property dari String() . 

Pusing? gimana buktiin nya ? cek kode berikut

let nama = "Budi";

let x = nama.toUpperCase(); // akan menghasilkan string baru
console.log(x); // BUDI
console.log(nama); // Budi

Nah kelihatan kan, kalo kita akses lagi console.log(nama); maka nama isinya tetap sama yaitu "Budi"

Belajar dan Tutorial Javascript Bahasa Indonesia lainnya ada di Github Belajar Javascript Bahasa Indonesia