ใน JavaScript มี 5 ประเภทพื้นฐาน:undefined, null, boolean, string และ number ทุกสิ่งทุกอย่างเป็นวัตถุ
บูลีนชนิดดั้งเดิม สตริง และตัวเลขสามารถห่อได้ด้วยออบเจ็กต์ wrapper เช่น อินสแตนซ์ของตัวสร้างบูลีน สตริง และตัวเลข ตามลำดับ
ในการดึงค่าดั้งเดิมกลับมาจากตัวตัดออบเจ็กต์ เราต้องเรียกใช้เมธอด valueOf บนออบเจ็กต์
ตัวอย่าง
console.log(typeof true); console.log(typeof new Boolean(true)); console.log(typeof (new Boolean(true)).valueOf()); console.log(typeof "abc"); console.log(typeof new String("abc")); console.log(typeof (new String("abc")).valueOf()); console.log(typeof 123); console.log(typeof new Number(123)); console.log(typeof (new Number(123)).valueOf());
ผลลัพธ์
"boolean" "object" "boolean" "string" "object" "string" "number" "object" "number"
อย่างที่คุณสามารถดูได้ที่นี่ ประเภทของ primitives คือบูลีน สตริง หรือตัวเลขในขณะที่ wrappers เป็นวัตถุ ทันทีที่เราได้รับค่าโดยใช้ valueOf เราก็จะได้ค่า primitive กลับมาอีกครั้ง
แต่ primitives ก็มีคุณสมบัติใน JS ด้วย เนื่องจาก JavaScript บังคับระหว่าง primitives และ object ตามความต้องการ ดังนั้นหากเราเข้าถึงคุณสมบัติ length บน primitive นี้ มันจะถูกห่อในอ็อบเจ็กต์ คุณสมบัตินี้มีการเข้าถึง และ primitive จะถูกเปิดอีกครั้ง