لا يحتوي Array على طريقة indexOF ، لذلك من المثير للقلق العثور على فهرس عنصر في صفيف. من أجل تسهيل الاتصال ، يتم تمديد 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
بعد التوسع ، إنه منعش للغاية ومريح للاستخدام ، وهو مشهد متناغم ...
ولكن عندما تكرر مرة واحدة عن عناصر الصفيف ، باستخدام .. في. تسببت حلقة في مشاكل أخرى وكسرت الجو المتناغم.
نسخة الكود كما يلي:
var a = ["Zhang Fei" ، "Guan Yu" ، "Liu Bei" ، "Lu Bu"] ؛
لـ (var p في A) {
document.write (p+"="+a [p]+"<br/>") ؛
}
أردت أصلاً أن أخرج أسماء هؤلاء الأشخاص الأربعة ، لكن ما هي النتيجة؟
الإخراج هو في الواقع:
نسخة الكود كما يلي:
// 0 = Zhang Fei
// 1 = جوان يو
// 2 = liu bei
// 3 = لو بو
// indexof = function (item) {for (var i = 0 ؛ i <this.length ؛ i ++) {if (this [i] == item) return i ؛ } العودة -1 ؛ }
بالإضافة إلى كتابة الاسم ، فإنه يقوم أيضًا بإخراج فهرس الطريقة الموسعة الخاصة به ، ولكن ما هو مجنون هو أن Firefox هو "طبيعي" ، مع أربعة أشخاص فقط. لماذا هذا يحدث؟
يمكن فهم فهرس الإخراج ، الذي يمتد من تلقاء نفسه. بعد كل شيء ، لأن .. في التكرار من خلال جميع الخصائص المعرفة من قبل المستخدم لكائن أو جميع عناصر الصفيف.
فلماذا لا يبرد فايرفوكس؟
بعد التحقق من المعلومات ، أدركت ذلك
Array يدعم بالفعل Array.Indexof () في إصدار JavaScript 1.6 ، في حين أن Firefox الذي أستخدمه هو الإصدار 3.5 ، الذي يدعم بالفعل JavaScript 1.8. INDEXOF هو طريقة متأصلة في الصفيف نفسه.
بالنسبة إلى IE ، حتى لو استخدمت IE8 ، فإنه يدعم فقط إصدار JavaScript 1.3.
لذلك ، يعتقد IE8 أن IndexOF هو "سمة معرفة من قبل المستخدم" ، بينما يعتقد Firefox أنها سمة متأصلة تدعمها دعمها الأصلي.
هل هذا هو الحال حقا؟
قم بتجربة ، وتغيير فهرس إلى myindexof ، وحاول مرة أخرى. نتيجة لذلك ، كل من IE و Firefox يخرج myindexof ، مما يثبت أن النقطة السابقة صحيحة.
ثم يأتي سؤال آخر. لقد وسعت فهرس لوقت طويل. الآن تستخدم العديد من رموز المشروع هذه الطريقة. الآن لا بد لي من استخدام .. في إخراج عناصر الصفيف نفسها. لا تمتد إلى الطريقة الروسية بنفسي. ماذا علي أن أفعل؟
لحسن الحظ ، توفر JavaScript طريقة HasownProperty.
ألق نظرة على وصفها:
نسخة الكود كما يلي:
كل كائن ينحدر من الكائن يرث طريقة HasownProperty. يمكن استخدام هذه الطريقة لتحديد ما إذا كان للكائن الخاصية المحددة كخاصية مباشرة لهذا الكائن ؛ على عكس المشغل ، لا تتحقق هذه الطريقة من سلسلة النموذج الأولي للكائن
انطلاقا من الوصف ، هذا ما نريد.
فقط أصدر حكمًا في ... في ...
نسخة الكود كما يلي:
if (a.hasownproperty (p)) {
document.write (p+"="+a [p]+"<br/>") ؛
}
بالإضافة إلى ذلك ، يتم إرفاق مثال على استخدام hasownproperty ، والذي يأتي من الإنترنت:
نسخة الكود كما يلي:
كتاب الوظيفة (العنوان ، المؤلف) {
this.title = title ؛
هذا. مؤلف = مؤلف ؛
}
book.prototype.price = 9.99 ؛
Object.prototype.copyright = "Herongyang.com" ؛
var mybook = كتاب جديد ("دروس JavaScript" ، "Herong Yang") ؛
// إلقاء الخصائص المدمجة على مستوى النموذج الأساسي
document.writeln ("/nobject.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 المدمجة:") ؛
dumpproperty (mybook ، "مُنشئ") ؛
dumpproperty (mybook ، "hasownproperty") ؛
dumpproperty (mybook ، "isPrototypeof") ؛
dumpproperty (mybook ، "tostring") ؛
dumpproperty (mybook ، "valueof") ؛
dumpproperty (mybook ، "حقوق الطبع والنشر") ؛
وظيفة dumpproperty (كائن ، خاصية) {
فار الميراث.
if (object.hasownproperty (property))
الميراث = "محلي" ؛
آخر
الميراث = "الميراث" ؛
document.writeln (الخاصية+":"+الميراث+":"
+كائن [خاصية]) ؛
}
تحقق من إصدار JavaScript الذي يدعمه المتصفح:
نسخة الكود كما يلي:
<! doctype html public "-// w3c // dtd xhtml 1.0 transitional // en"
<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>
<script language = "javaScript">
//document.write("your type: "+navigator.appname+" <br/> ") ؛
//document.write("browser إصدار: "+navigator.appversion+" <br/> ") ؛
// المتصفحات التي تدعم JavaScript 1.0 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.0 <br/>') ؛
</script>
<script language = "javaScript1.1">
// المتصفحات التي تدعم JavaScript 1.1 يمكن تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.1 <br/>') ؛
</script>
<script language = "javaScript1.2">
// المتصفحات التي تدعم JavaScript 1.2 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.2 <br/>') ؛
</script>
<script language = "javaScript1.3">
// المتصفحات التي تدعم JavaScript 1.3 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.3 <br/>') ؛
</script>
<script language = "javaScript1.4">
// المتصفحات التي تدعم JavaScript 1.4 يمكن تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم JavaScript1.4 <br/>') ؛
</script>
<script language = "javaScript1.5">
// المتصفحات التي تدعم JavaScript 1.5 يمكن تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.5 <br/>') ؛
</script>
<script language = "javaScript1.6">
// المتصفحات التي تدعم JavaScript 1.6 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.6 <br/>') ؛
</script>
<script language = "javaScript1.7">
// المتصفحات التي تدعم JavaScript 1.7 يمكن تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.7 <br/>') ؛
</script>
<script language = "javaScript1.8">
// المتصفحات التي تدعم JavaScript 1.8 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.8 <br/>') ؛
</script>
<script language = "javaScript1.9">
// المتصفحات التي تدعم JavaScript 1.9 يمكنها تنفيذ هذا البرنامج النصي
document.write ('هذا المتصفح يدعم javaScript1.9 <br/>') ؛
</script>
</body>
</html>