อาร์เรย์ไม่มีวิธีการดัชนีดังนั้นจึงเป็นเรื่องยากมากขึ้นในการค้นหาดัชนีขององค์ประกอบในอาร์เรย์ เพื่ออำนวยความสะดวกในการโทร Array.prototype.indexof () จะขยายผ่านต้นแบบต้นแบบซึ่งสะดวกกว่าในการใช้งาน อย่างไรก็ตามดัชนีที่กำหนดเองนี้มีปัญหาเมื่อผ่านอาร์เรย์
การคัดลอกรหัสมีดังนี้:
array.prototype.indexof = function (item) {
สำหรับ (var i = 0; i <this.length; i ++) {
ถ้า (นี่ [i] == รายการ)
กลับฉัน;
-
กลับ -1;
-
เมื่อใช้มันตรงไปตรงมา
การคัดลอกรหัสมีดังนี้:
var arr = [1,2,3,4,5];
var index = arr.indexof (1); // index == 0
หลังจากการขยายตัวมันสดชื่นและสะดวกในการใช้งานและเป็นฉากที่กลมกลืน ...
แต่เมื่อครั้งหนึ่งกำลังวนซ้ำกับองค์ประกอบอาร์เรย์โดยใช้สำหรับ .. ใน Loop ทำให้เกิดปัญหาอื่น ๆ และทำลายบรรยากาศที่กลมกลืนกัน
การคัดลอกรหัสมีดังนี้:
var a = ["Zhang Fei", "Guan Yu", "Liu Bei", "Lu Bu"];
สำหรับ (var p ใน a) {
document.write (p+"="+a [p]+"<br/>");
-
ตอนแรกฉันต้องการส่งออกชื่อของคนทั้งสี่นี้ แต่ผลลัพธ์คืออะไร?
เอาท์พุทคือจริง:
การคัดลอกรหัสมีดังนี้:
// 0 = จางเฟย
// 1 = guan yu
// 2 = liu bei
// 3 = lu bu
// indexof = function (item) {สำหรับ (var i = 0; i <this.length; i ++) {ถ้า (this [i] == item) return i; } return -1; -
นอกเหนือจากการพิมพ์ชื่อแล้วมันยังเอาท์พุทดัชนีวิธีการขยายของตัวเอง แต่สิ่งที่บ้าคือ Firefox คือ "ปกติ" โดยมีชื่อเพียงสี่คนเท่านั้น ทำไมสิ่งนี้ถึงเกิดขึ้น?
ดัชนีเอาท์พุทของตัวเองสามารถเข้าใจได้ ท้ายที่สุดสำหรับ .. ในการทำซ้ำผ่านคุณสมบัติที่ผู้ใช้กำหนดทั้งหมดของวัตถุหรือองค์ประกอบทั้งหมดของอาร์เรย์
แล้วทำไม Firefox ไม่?
หลังจากตรวจสอบข้อมูลแล้วฉันก็รู้ว่า
อาร์เรย์รองรับ array.indexof () ในรุ่น JavaScript 1.6 ในขณะที่ Firefox ที่ฉันใช้คือเวอร์ชัน 3.5 ซึ่งรองรับ JavaScript 1.8 แล้ว INDEXOF เป็นวิธีการโดยธรรมชาติของอาร์เรย์เอง
สำหรับ IE แม้ว่าฉันจะใช้ IE8 แต่ก็รองรับรุ่น JavaScript 1.3 เท่านั้น
ดังนั้น IE8 เชื่อว่าดัชนีของเป็น "แอตทริบิวต์ที่ผู้ใช้กำหนด" ในขณะที่ Firefox เชื่อว่ามันเป็นคุณลักษณะโดยธรรมชาติที่ได้รับการสนับสนุนโดยการสนับสนุนดั้งเดิมของตัวเอง
นี่เป็นกรณีจริงเหรอ?
ทำการทดลองเปลี่ยนดัชนีของ myindexof แล้วลองอีกครั้ง เป็นผลให้ทั้ง IE และ Firefox ส่งออก myindexof พิสูจน์ว่าจุดก่อนหน้านั้นถูกต้อง
จากนั้นก็มีคำถามอื่น ฉันได้ขยายดัชนีของมาเป็นเวลานาน ตอนนี้รหัสโครงการจำนวนมากใช้วิธีนี้ ตอนนี้ฉันต้องใช้สำหรับ .. ในองค์ประกอบที่ส่งออกของอาร์เรย์เอง อย่าขยายไปถึงวิธีการของรัสเซียด้วยตัวเอง ฉันควรทำอย่างไร?
โชคดีที่ JavaScript ให้วิธี HasownProperty
ดูคำอธิบาย:
การคัดลอกรหัสมีดังนี้:
วัตถุทุกชิ้นสืบเชื้อสายมาจากวัตถุสืบทอดวิธี HasownProperty วิธีนี้สามารถใช้เพื่อพิจารณาว่าวัตถุมีคุณสมบัติที่ระบุเป็นคุณสมบัติโดยตรงของวัตถุนั้นหรือไม่ ซึ่งแตกต่างจากผู้ให้บริการในวิธีนี้ไม่ได้ตรวจสอบห่วงโซ่ต้นแบบของวัตถุ
ตัดสินจากคำอธิบายมันเป็นสิ่งที่เราต้องการ
เพียงแค่ตัดสินเพื่อ ... ใน ...
การคัดลอกรหัสมีดังนี้:
if (A.HasownProperty (P)) {
document.write (p+"="+a [p]+"<br/>");
-
นอกจากนี้ยังมีตัวอย่างของการใช้งาน HasownProperty ซึ่งมาจากอินเทอร์เน็ต:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นหนังสือ (ชื่อผู้แต่ง) {
this.title = title;
this.author = ผู้แต่ง;
-
book.prototype.price = 9.99;
Object.prototype.copyright = "herongyang.com";
var mybook = หนังสือเล่มใหม่ ("บทช่วยสอน JavaScript", "Herong Yang");
// การทิ้งคุณสมบัติในตัวที่ระดับต้นแบบพื้นฐาน
Document.writeLn ("/nobject.prototy.prototype ในตัว:");
dumpproperty (Object.prototype, "Constructor");
Dumpproperty (Object.prototype, "HasownProperty");
dumpproperty (object.prototype, "isprototypeof");
dumpproperty (Object.prototype, "ToString");
dumpproperty (object.prototype, "valueof");
Dumpproperty (Object.prototype, "ลิขสิทธิ์");
// การทิ้งคุณสมบัติในตัวในระดับต้นแบบของฉัน
Document.writeLn ("/n =========================/nbook คุณสมบัติในตัวของ Prototype:");
dumpproperty (book.prototype, "constructor");
Dumpproperty (Book.prototype, "HasownProperty");
dumpproperty (book.prototype, "isprototypeof");
Dumpproperty (book.prototype, "ToString");
dumpproperty (book.prototype, "valueof");
dumpproperty (book.prototype, "ลิขสิทธิ์");
// การทิ้งคุณสมบัติในตัวในระดับวัตถุ
document.writeLn ("/n ==========================/NMYBOOK คุณสมบัติในตัวของ NMYBOOK:");
Dumpproperty (MyBook, "Constructor");
Dumpproperty (MyBook, "HasownProperty");
dumpproperty (mybook, "isprototypeof");
Dumpproperty (MyBook, "ToString");
dumpproperty (mybook, "valueof");
Dumpproperty (MyBook, "ลิขสิทธิ์");
ฟังก์ชั่น dumpproperty (วัตถุ, คุณสมบัติ) {
การสืบทอด VAR;
if (object.hasownproperty (คุณสมบัติ))
มรดก = "ท้องถิ่น";
อื่น
มรดก = "มรดก";
document.writeln (คุณสมบัติ+":"+มรดก+":"
+วัตถุ [คุณสมบัติ]);
-
ตรวจสอบ JavaScript เวอร์ชันใดที่ได้รับการสนับสนุนโดยเบราว์เซอร์:
การคัดลอกรหัสมีดังนี้:
<! doctype html public "-// w3c // dtd xhtml 1.0 transitional // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "content-type" content = "text /html; charset = utf-8" />
<title> รุ่น JavaScript ของเบราว์เซอร์รองรับการทดสอบ </title>
</head>
<body>
<ภาษาสคริปต์ = "JavaScript">
//document.write(" ประเภทเบราว์เซอร์: "+navigator.appname+" <br/> ");
//document.write("browser เวอร์ชัน: "+Navigator.Appversion+" <br/> ");
// เบราว์เซอร์ที่รองรับ JavaScript 1.0 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.0 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.1">
// เบราว์เซอร์ที่รองรับ JavaScript 1.1 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.1 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.2">
// เบราว์เซอร์ที่รองรับ JavaScript 1.2 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.2 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.3">
// เบราว์เซอร์ที่รองรับ JavaScript 1.3 สามารถเรียกใช้สคริปต์นี้ได้
Document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.3 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.4">
// เบราว์เซอร์ที่รองรับ JavaScript 1.4 สามารถเรียกใช้สคริปต์นี้ได้
Document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.4 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.5">
// เบราว์เซอร์ที่รองรับ JavaScript 1.5 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.5 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.6">
// เบราว์เซอร์ที่รองรับ JavaScript 1.6 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.6 <br/>');
</script>
<ภาษาสคริปต์ = "JavaScript1.7">
// เบราว์เซอร์ที่รองรับ JavaScript 1.7 สามารถเรียกใช้สคริปต์นี้ได้
Document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.7 <br/>');
</script>
<ภาษาสคริปต์ = "javascript1.8">
// เบราว์เซอร์ที่รองรับ JavaScript 1.8 สามารถเรียกใช้สคริปต์นี้ได้
Document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.8 <br/>');
</script>
<ภาษาสคริปต์ = "javascript1.9">
// เบราว์เซอร์ที่รองรับ JavaScript 1.9 สามารถเรียกใช้สคริปต์นี้ได้
document.write ('เบราว์เซอร์นี้รองรับ JavaScript1.9 <br/>');
</script>
</body>
</html>