การแนะนำ
เราทุกคนรู้ว่าชนิดข้อมูล JavaScript แบ่งออกเป็นสองประเภท: ประเภทพื้นฐาน (หรือประเภทดั้งเดิม) และประเภทอ้างอิง
ค่าของประเภทพื้นฐานเป็นส่วนที่ง่ายของข้อมูลที่เก็บไว้ในหน่วยความจำสแต็กและพวกเขาจะเข้าถึงได้ด้วยค่า มีห้าประเภทพื้นฐานใน JS: undefined, null, boolean, จำนวนและสตริง
ค่าประเภทการอ้างอิงเป็นวัตถุที่เก็บไว้ในหน่วยความจำฮีปและค่าของมันถูกเข้าถึงโดยการอ้างอิง ประเภทการอ้างอิงส่วนใหญ่เป็นวัตถุ, อาร์เรย์, ฟังก์ชั่น, regexp และวันที่
วัตถุมีคุณสมบัติและวิธีการดังนั้นจึงไม่น่าแปลกใจที่เราเห็นรหัสต่อไปนี้
var favs = ['Egg', 'Lotus Pot']; favs.push ('okra'); console.log (favs); // ["ไข่", "Lotus Pot", "Okra"] console.log (favs.length); // 3อาร์เรย์เป็นประเภทอ้างอิงดังนั้นจึงสามารถมีคุณลักษณะ (ความยาว) และวิธีการ (ดัน) ซึ่งเป็นธรรมชาติเช่นต้องกินไอศกรีมในฤดูร้อน แต่ดูรหัสต่อไปนี้และคิดอย่างรอบคอบนี่คือนี่นี่คือกฎหมายหรือไม่?
var realMessage = "บอกว่าฉันรักคุณ แต่ฉันโกหก"; var myMessage = realMessage.substring (5,15); console.log (myMessage); //"ฉันรักคุณ"
มีหญิงสาวอกหักที่จะทำวิธี "substring" โดยจงใจดำเนินการวิธี "substring" บนสตริงที่ใช้ในการสลายตัวและจากนั้นดูการตัดและหลับอย่างมีความสุข แต่ แต่มันไม่ได้บอกว่าสตริงเป็นประเภทพื้นฐานหรือไม่? ทำไมถึงมีวิธีการ? - มีกฎหมายกษัตริย์อื่น ๆ หรือไม่อาจารย์ชิงเตียน!
อันที่จริงทั้งหมดนี้เป็นเพราะสิ่งที่เรียกว่า "ประเภทบรรจุภัณฑ์พื้นฐาน" ประเภทบรรจุภัณฑ์พื้นฐานนี้มีความซื่อสัตย์เป็นพิเศษและมันเป็น "การคืนเสื้อผ้าจริง ๆ หลังจากเรื่องซ่อนข้อดีและชื่อเสียง"!
ประเภทบรรจุภัณฑ์พื้นฐาน
นอกเหนือจากประเภทการอ้างอิงเช่นวัตถุและอาร์เรย์ที่กล่าวถึงในตอนต้น JavaScript ยังให้เรามีสามประเภทอ้างอิงพิเศษ: สตริงหมายเลขและบูลีนซึ่งช่วยให้เราสามารถใช้งานประเภทพื้นฐานที่สอดคล้องกันได้
ดูตัวอย่างข้างต้นของการตัดสตริง คุณสังเกตเห็นหรือไม่ว่าแม้จะใช้วิธีการย่อย แต่ค่าของ RealMessage นั้นจะไม่เปลี่ยนแปลง การเรียกใช้วิธีนี้จะส่งคืนสตริงใหม่เท่านั้น
นี่คือสิ่งที่ประเภทบรรจุภัณฑ์พื้นฐานทำ ในขั้นต้นคุณไม่มีวิธีการ แต่เมื่อคุณต้องการใช้งานคุณสามารถปรับได้และประเภทบรรจุภัณฑ์พื้นฐานที่สอดคล้องกันมีวิธีนี้ ตัวอย่างเช่นวิธีการย่อยด้านบนมันเป็นไปไม่ได้ที่สตริงประเภทพื้นฐานที่จะมีวิธีนี้ แต่ประเภทบรรจุภัณฑ์ของสตริงมีมันจะกระซิบและส่งคืนผลลัพธ์หลังจากดำเนินการวิธีนี้ ในการดำเนินการกับ:
มีหลายสิ่งหลายอย่างเกิดขึ้นเมื่อ RealMessage.Substring (5,15) รหัสบรรทัดนี้
ก่อนอื่นมันจะอ่านค่าของ RealMessage จากหน่วยความจำ เมื่ออยู่ในโหมดการอ่านนี้พื้นหลังจะเริ่มทำงาน JS Elevation อธิบายการกระทำเหล่านี้เสร็จสมบูรณ์ในพื้นหลังเช่นนี้:
1. สร้างอินสแตนซ์ของประเภทสตริง
2. เรียกวิธีการที่ระบุในอินสแตนซ์;
3. ทำลายอินสแตนซ์นี้
ตัวอย่างข้างต้นสามารถอธิบายได้ในรหัสเช่นนี้:
var _realMessage = สตริงใหม่ ("บอกว่าฉันรักคุณ แต่ฉันโกหก"); var myMessage = _realMessage.substring (5,15); _ realMessGae = null; // ทำลายหลังจากวิธีการเรียกดังนั้นด้วยวิธีนี้เราเข้าใจว่าไม่ใช่ว่าสตริงประเภทพื้นฐานจะดำเนินการวิธีการของตัวเอง แต่พื้นหลังสร้างสตริงประเภท wrapper พื้นฐานที่สอดคล้องกันสำหรับมัน มันอินสแตนซ์อินสแตนซ์ตามค่าของประเภทพื้นฐานปล่อยให้อินสแตนซ์นี้เรียกวิธีการที่ระบุและในที่สุดก็ทำลายตัวเองซึ่งกำลังเคลื่อนไหว
ให้ความสนใจกับคุณลักษณะ "ทำลาย" ของขั้นตอนสุดท้ายของประเภท wrapper พื้นฐานซึ่งกำหนดว่าเราไม่สามารถเพิ่มคุณสมบัติและวิธีการที่กำหนดเองให้กับค่าประเภทพื้นฐาน
var me = "sunjing"; me.age = 18; console.log (me.age); // undefined
ฉันเพิ่มแอตทริบิวต์อายุให้กับสตริง "ฉัน" และค่าถูกตั้งค่าให้สวยงามอายุ 18 ปี อย่างไรก็ตามเมื่อฉันเข้าถึงอีกครั้งคุณลักษณะนี้ก็หายไป นี่เป็นเพราะ:
เมื่อการกำหนดแอตทริบิวต์โค้ดบรรทัดที่สองมีการสร้างอินสแตนซ์ของประเภท wrapper พื้นฐานจะถูกสร้างขึ้นในพื้นหลัง แอตทริบิวต์อายุนี้ถูกแขวนไว้ในอินสแตนซ์ แต่หลังจากนั้นทันทีอินสแตนซ์จะถูกทำลาย เมื่อดำเนินการกับบรรทัดที่สามอินสแตนซ์ใหม่ของประเภท wrapper พื้นฐานจะถูกสร้างขึ้นใหม่และโดยธรรมชาติไม่มีแอตทริบิวต์อายุ
แสดงประเภทบรรจุภัณฑ์พื้นฐาน
นอกเหนือจากสตริงในโหมดอ่านพื้นหลังจะช่วยเราสร้างอินสแตนซ์ประเภท wrapper พื้นฐานซึ่งเราสามารถแสดงได้
var str = สตริงใหม่ ("hello"); var str2 = str.touppercase (); console.log (str2); // "สวัสดี:สิ่งนี้แตกต่างจากสิ่งที่บันทึกไว้ในตัวแปรเมื่อพื้นหลังช่วยให้เราสร้าง
var str1 = สตริงใหม่ ("hello"); var str2 = "hello"; typeof str1 // "object" typeof str2 // "สตริง"สรุป
ต้องขอบคุณประเภทบรรจุภัณฑ์พื้นฐานทำให้เราสามารถใช้งานสตริง Boolean และหมายเลขพื้นฐานได้สามประเภท เมื่อใดก็ตามที่อ่านค่าประเภทพื้นฐานทั้งสามนี้พื้นหลังจะสร้างอินสแตนซ์ประเภท wrapper ที่สอดคล้องกัน อินสแตนซ์นี้จะเรียกวิธีการที่ระบุและจะถูกทำลายหลังจากการโทร วัฏจักรชีวิตสั้น ๆ นี้กำหนดว่าเราไม่สามารถเพิ่มคุณสมบัติและวิธีการที่กำหนดเองให้กับประเภทดั้งเดิม
บทความข้างต้นมีความเข้าใจอย่างลึกซึ้งว่าทำไมสายสามารถเป็นเจ้าของใน JavaScript นี่คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น