Массив не имеет метода индекса, поэтому более трудно найти индекс элемента в массиве. Чтобы облегчить вызов, Array.prototype.indexof () расширяется через прототип прототипа, который более удобен в использовании. Тем не менее, этот пользовательский индекс имеет проблемы, когда он пересекает массив.
Кода -копия выглядит следующим образом:
Array.prototype.indexof = function (item) {
for (var i = 0; i <this.length; i ++) {
if (это [i] == item)
вернуть я;
}
возврат -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 в а) {
document.write (p+"="+a [p]+"<br/>");
}
Первоначально я хотел вывести имена этих четырех человек, но каков был результат?
Вывод на самом деле:
Кода -копия выглядит следующим образом:
// 0 = Чжан Фей
// 1 = Гуань Ю
// 2 = Лю Бей
// 3 = lu bu
// indexof = function (item) {for (var i = 0; i <this.length; i ++) {if (this [i] == item) return i; } return -1; }
В дополнение к печати имени, оно также выводит свой собственный индекс расширенного метода, но сумасшедший, так это то, что Firefox «нормальный», только четыре человека имена. Почему это происходит?
Выходной индекс, который распространяется сама по себе, может быть понят. В конце концов, ибо .. в том, чтобы итерация через все определенные пользователи свойства объекта или все элементы массива.
Так почему же не Firefox?
После проверки информации я понял, что
Array уже поддерживает Array.indexof () в версии JavaScript 1.6, в то время как Firefox, который я использую, - это версия 3.5, которая уже поддерживает JavaScript 1.8. Индекс является неотъемлемым методом самого массива.
Что касается IE, даже если я использую IE8, он поддерживает только версию JavaScript 1.3.
Поэтому IE8 считает, что IndexOF является «пользовательским атрибутом», в то время как Firefox считает, что это неотъемлемый атрибут, поддерживаемый его собственной собственной поддержкой.
Это действительно так?
Сделайте эксперимент, измените индекс на MyIndexof и попробуйте еще раз. В результате как IE, так и Firefox выводят MyIndexof, доказывая, что предыдущая точка верна.
Затем наступает другой вопрос. Я долгое время расширил индекс. Теперь многие коды проектов используют этот метод. Теперь я должен использовать для ... для вывода элементов самого массива. Не распространяйте его на русский метод сам. Что я должен делать?
К счастью, JavaScript предоставляет метод HasownProperty.
Взгляните на его описание:
Кода -копия выглядит следующим образом:
Каждый объект произошел от объекта наследует метод HasownProperty. Этот метод может быть использован для определения того, имеет ли объект указанное свойство в качестве прямого свойства этого объекта; В отличие от оператора IN, этот метод не проверяет цепочку прототипа объекта
Судя по описанию, это то, что мы хотим.
Просто вынести суждение за ... в ...
Кода -копия выглядит следующим образом:
if (a.hasownproperty (p)) {
document.write (p+"="+a [p]+"<br/>");
}
Кроме того, приведен пример использования HasownProperty, который поступает из Интернета:
Кода -копия выглядит следующим образом:
Функциональная книга (заголовок, автор) {
this.title = заголовок;
this.author = автор;
}
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, "Copyright");
// сбрасывание встроенных свойств на уровне прототипа
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, "Copyright");
// сбрасывание встроенных свойств на уровне объекта
document.writeln ("/n =====================/NMYBook встроенные свойства:");
Dumpproperty (MyBook, "Constructor");
Dumpproperty (MyBook, "HasownProperty");
Dumpproperty (MyBook, "Isprototypeof");
Dumpproperty (MyBook, "Tostring");
Dumpproperty (MyBook, "ValueOf");
Dumpproperty (MyBook, "Copyright");
Функция DumppRoperty (Object, Property) {
наследство вари;
if (object.hashownproperty (Property))
наследство = "локальный";
еще
наследование = "наследование";
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">
<голова>
<meta http-equiv = "content-type" content = "text /html; charset = utf-8" />
<title> Версия браузера JavaScript поддерживает тестирование </title>
</head>
<тело>
<script language = "javascript">
//document.write("your Browser Тип: "+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>