ในจาวาสคริปต์สามารถสร้างอาร์เรย์ได้โดยใช้ตัวสร้างอาร์เรย์หรือสร้างขึ้นอย่างรวดเร็วโดยใช้ [] ซึ่งเป็นวิธีที่ต้องการ อาร์เรย์เป็นต้นแบบที่สืบทอดมาจากวัตถุและไม่มีค่าส่งคืนพิเศษสำหรับ typeof แต่จะส่งคืน 'วัตถุ' เท่านั้น
1. array.prototype.slice วิธีการ
วิธีการชิ้นของอาร์เรย์มักจะใช้เพื่อแยกชิ้นส่วนออกจากอาร์เรย์ อย่างไรก็ตามมันยังมีความสามารถในการแปลง "อาร์เรย์คลาส" (เช่นอาร์กิวเมนต์และ htmlcollection) เป็นอาร์เรย์จริง
การคัดลอกรหัสมีดังนี้:
var nodesarr = array.prototype.slice.call (document.forms);
var argsarr = array.prototype.slice.call (อาร์กิวเมนต์);
ฉันอยากรู้ว่าทำไมวิธีการชิ้นส่วนของอาร์เรย์จึงมีทักษะดังกล่าวและมันใช้งานได้อย่างไรในเครื่องยนต์ JavaScript? วิธีการของพี่น้องมีทักษะดังกล่าวหรือไม่?
ด้วยความอยากรู้อยากเห็นดาวน์โหลดซอร์สโค้ด V8 JavaScript ของ Google ของ Google ไปยังพื้นที่ท้องถิ่น ที่อยู่ดาวน์โหลดของซอร์สโค้ด V8 คือ: https://github.com/v8/v8
ค้นหา "array.prototype.slice" ใน v8-master/src/array.js:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น arrayslice (start, end) {
check_object_coercible (นี่ "array.prototype.slice");
-
var result = []; // ประโยคนี้เป็นกุญแจสำคัญ
if (end_i <start_i) ผลการส่งคืน;
if (useSparSevariant (Array, Len, is_Array (Array), end_i - start_i)) {
-
sparseslice (อาร์เรย์, start_i, end_i - start_i, len, ผลลัพธ์);
} อื่น {
simpleslice (อาร์เรย์, start_i, end_i - start_i, len, ผลลัพธ์);
-
-
ผลการกลับมา;
จากนั้นฉันเดาว่าควรใช้วิธี simpleslice ที่เรียกว่า "อาร์เรย์คลาส" จากนั้นค้นหา "simpleslice" ในซอร์สโค้ดและพบว่าวิธี SimplesLice เรียกว่าในซอร์สโค้ดของ Array.prototype.splice และตัวแปรผลลัพธ์ก็เริ่มต้นเป็นอาร์เรย์ที่ว่างเปล่า อย่างไรก็ตามหากคุณต้องการใช้วิธีการประกบเพื่อแปลง "คลาสอาร์เรย์" เป็นอาร์เรย์จริงคุณต้องส่งพารามิเตอร์ตำแหน่งเริ่มต้นไปที่ 0 นั่นคือ:
การคัดลอกรหัสมีดังนี้:
var nodesarr = array.prototype.splice.call (document.forms, 0);
เพราะหลักการดำเนินการคือการสร้างอาร์เรย์ใหม่โดยรายการอาร์เรย์ที่ถูกลบ หากคุณสนใจคุณสามารถตรวจสอบการใช้ซอร์สโค้ดของ Array.prototype.splice
นอกจากนี้ชิ้นยังสามารถโคลนอาร์เรย์ได้:
การคัดลอกรหัสมีดังนี้:
var arr = [1, 2, 3];
var clonearr = arr.slice (); // clonearr: [1, 2, 3]
2. array.prototype.push วิธีการ
ใช้วิธีการพุชเพื่อรวมอาร์เรย์:
การคัดลอกรหัสมีดังนี้:
var arr1 = [1, 'str', {ชื่อ: 'lang'}];
var arr2 = [2, 'ing'];
array.prototype.push.apply (arr1, arr2);
// ผลตอบแทนผลลัพธ์: [1, "str", {ชื่อ: 'lang'}, 2, "ing"]
3. array.prototype.sort วิธีการ
อัปโหลดรหัสก่อนอื่น:
การคัดลอกรหัสมีดังนี้:
var arr = ['1', '2', '10', '12'];
arr.sort ();
// ผลตอบแทนผล: ["1", "10", "12", "2"]
ผลลัพธ์ข้างต้นมักไม่ใช่สิ่งที่เราต้องการดังนั้นเราจะเรียงลำดับตามขนาดตัวเลขได้อย่างไร:
การคัดลอกรหัสมีดังนี้:
arr.sort (ฟังก์ชั่น (a, b) {
กลับ A - B;
-
// ผลตอบแทนผล: ["1", "2", "10", "12"]
ด้วยฟังก์ชั่นเปรียบเทียบการเรียงลำดับคุณสามารถปรับแต่งตัวเปรียบเทียบจำนวนมากเพื่อให้ได้การเรียงลำดับส่วนบุคคล
4. แอตทริบิวต์ความยาว
แอตทริบิวต์ความยาวของอาร์เรย์ไม่ได้อ่านอย่างเดียวซึ่งหมายความว่าสามารถเขียนได้ ตัวอย่างเช่นใช้แอตทริบิวต์ความยาวเพื่อตัดทอนอาร์เรย์:
การคัดลอกรหัสมีดังนี้:
var arr = [1, 2, 3, 4];
arr.length = 2;
// arr: [1, 2]
arr.length = 0;
// arr: []
ในเวลาเดียวกันหากแอตทริบิวต์ความยาวเพิ่มขึ้นค่าความยาวของอาร์เรย์จะเพิ่มขึ้นและใช้ไม่ได้กำหนดเป็นองค์ประกอบใหม่ในการเติม
การคัดลอกรหัสมีดังนี้:
var arr = [];
arr.length = 3;
// arr: [ไม่ได้กำหนด, ไม่ได้กำหนด, ไม่ได้กำหนด]
โอเควันนี้มาให้เสร็จ เช้าตรู่แล้ว หากคุณมีการค้นพบใหม่ในอนาคตคุณจะต่อท้ายที่นี่
ก่อนหน้านี้ฉันไม่ได้มีนิสัยชอบเขียนบล็อก แต่ฉันเคยใช้เพื่อสรุปการสรุปตามปกติของฉันลงในบันทึกย่อของ YouDaoyun ฉันไม่ได้คาดหวังว่าจะต้องใช้ความคิดบางอย่างที่จะเขียนมุมมองของฉันเพราะฉันต้องพิจารณาวิธีการแสดงเพื่อให้คนอื่นเข้าใจได้ดีขึ้น
หากคุณมีการแสดงออกที่ผิดหรือเข้าใจผิดฉันหวังว่าทุกคนจะช่วยคุณแก้ไขฉันได้
นอกจากนี้ยังแนบวิธีการอาร์เรย์ JavaScript ที่ใช้กันทั่วไป
concat () เชื่อมต่อสองอาร์เรย์ขึ้นไปและส่งคืนผลลัพธ์
เข้าร่วม () วางองค์ประกอบทั้งหมดของอาร์เรย์ลงในสตริง องค์ประกอบจะถูกคั่นด้วยตัวคั่นที่ระบุ
pop () ลบและส่งคืนองค์ประกอบสุดท้ายของอาร์เรย์
push () เพิ่มองค์ประกอบหนึ่งหรือมากกว่าไปยังจุดสิ้นสุดของอาร์เรย์และส่งคืนความยาวใหม่
ย้อนกลับ () ย้อนกลับ () กลับลำดับขององค์ประกอบในอาร์เรย์
Shift () ลบและส่งคืนองค์ประกอบแรกของอาร์เรย์
Slice () ส่งคืนองค์ประกอบที่เลือกจากอาร์เรย์ที่มีอยู่
เรียงลำดับ () จัดเรียงองค์ประกอบของอาร์เรย์
Splice () ลบองค์ประกอบและเพิ่มองค์ประกอบใหม่ให้กับอาร์เรย์
Tosource () ส่งคืนซอร์สโค้ดของวัตถุ
ToString () แปลงอาร์เรย์เป็นสตริงและส่งคืนผลลัพธ์
Tolocalestring () แปลงอาร์เรย์เป็นอาร์เรย์ท้องถิ่นและส่งคืนผลลัพธ์
Unshift () เพิ่มองค์ประกอบอย่างน้อยหนึ่งอย่างกับจุดเริ่มต้นของอาร์เรย์และส่งคืนความยาวใหม่
valueof () ส่งคืนค่าดั้งเดิมของวัตถุอาร์เรย์