La matriz no tiene un índice de método, por lo que es más problemático encontrar el índice de un elemento en una matriz. Para facilitar la llamada, Array.Prototype.IndexOf () se extiende a través del prototipo prototipo, que es más conveniente de usar. Sin embargo, este índice personalizado tiene problemas cuando atraviesa la matriz.
La copia del código es la siguiente:
Array.prototype.indexof = function (item) {
para (var i = 0; i <this.length; i ++) {
if (este [i] == item)
regresar i;
}
regreso -1;
}
Al usarlo, es sencillo
La copia del código es la siguiente:
var arr = [1,2,3,4,5];
Var index = arr.indexof (1); // índice == 0
Después de la expansión, es muy refrescante y conveniente de usar, y es una escena armoniosa ...
Pero cuando una vez se itera sobre los elementos de la matriz, usando el for ... en. El bucle causó otros problemas y rompió la atmósfera armoniosa.
La copia del código es la siguiente:
var a = ["zhang fei", "guan yu", "liu bei", "lu bu"];
para (var p en a) {
document.write (p+"="+a [p]+"<br/>");
}
Originalmente quería generar los nombres de estas cuatro personas, pero ¿cuál fue el resultado?
La salida es en realidad:
La copia del código es la siguiente:
// 0 = Zhang Fei
// 1 = Guan Yu
// 2 = liu bei
// 3 = Lu Bu
// indexOf = function (item) {for (var i = 0; i <this.length; i ++) {if (this [i] == item) return i; } return -1; }
Además de escribir el nombre, también genera su propio índice de método extendido, pero lo que es loco es que Firefox es "normal", con solo los nombres de cuatro personas. ¿Por qué está sucediendo esto?
El índice de salida, que se extiende por sí mismo, se puede entender. Después de todo, para ... es iterar a través de todas las propiedades definidas por el usuario de un objeto o todos los elementos de una matriz.
Entonces, ¿por qué no Firefox?
Después de revisar la información, me di cuenta de que
Array ya admite Array.IndexOf () en la versión JavaScript 1.6, mientras que el Firefox que uso es la versión 3.5, que ya admite JavaScript 1.8. IndexOF es un método inherente de matriz en sí.
En cuanto a IE, incluso si uso IE8, solo admite la versión JavaScript 1.3.
Por lo tanto, IE8 cree que IndexOF es un "atributo definido por el usuario", mientras que Firefox cree que es un atributo inherente respaldado por su propio soporte nativo.
¿Es este realmente el caso?
Haga un experimento, cambie el índice de myIndexof e intente nuevamente. Como resultado, la salida de IE y Firefox myIndexof, demostrando que el punto anterior es correcto.
Entonces llega otra pregunta. He ampliado el índice de mucho tiempo. Ahora muchos códigos de proyecto han estado utilizando este método. Ahora tengo que usar para ... en los elementos de salida de la matriz en sí. No lo extienda al método ruso yo mismo. ¿Qué tengo que hacer?
Afortunadamente, JavaScript proporciona el método de HaswnProperty.
Eche un vistazo a su descripción:
La copia del código es la siguiente:
Cada objeto descendía del objeto hereda el método de la propertia de Haswn. Este método se puede utilizar para determinar si un objeto tiene la propiedad especificada como una propiedad directa de ese objeto; A diferencia del operador In, este método no verifica la cadena prototipo del objeto
A juzgar por la descripción, es lo que queremos.
Solo haz un juicio por ... en ...
La copia del código es la siguiente:
if (a.hasownproperty (p)) {
document.write (p+"="+a [p]+"<br/>");
}
Además, se adjunta un ejemplo de uso de la propertia de la dura, que proviene de Internet:
La copia del código es la siguiente:
Libro de funciones (título, autor) {
this.title = title;
this.author = autor;
}
Book.prototype.price = 9.99;
Objeto.prototype.copyright = "Herongyang.com";
var mybook = nuevo libro ("Tutoriales de JavaScript", "Herong Yang");
// Dumping Propiedades integradas a nivel de prototipo base
document.writeln ("/nobject.prototype las propiedades incorporadas:");
DumpProperty (objeto.prototype, "constructor");
DumpProperty (Object.Prototype, "HasownProperty");
dumpProperty (objeto.prototype, "isprototypeOf");
DumpProperty (Object.Prototype, "ToString");
dumpProperty (object.prototype, "valueOf");
DumpProperty (objeto.prototype, "copyright");
// Dumping Propiedades integradas en el nivel de mi prototipo
document.writeLn ("/n =======================/nbook.prototype Las propiedades incorporadas:");
DumpProperty (book.prototype, "constructor");
DumpProperty (book.prototype, "HasnownProperty");
DumpProperty (book.prototype, "isprototypeOf");
DumpProperty (book.prototype, "toString");
DumpProperty (book.prototype, "valuef");
DumpProperty (book.prototype, "Copyright");
// Dumping Propiedades integradas a nivel de objeto
document.writeLn ("/n ========================/NMYBOOK Las propiedades incorporadas:");
DumpProperty (Mybook, "Constructor");
DumpProperty (Mybook, "Hasownproperty");
DumpProperty (mybook, "isprototypeOf");
DumpProperty (mybook, "toString");
DumpProperty (mybook, "valueOf");
DumpProperty (Mybook, "Copyright");
function dumppRoperty (objeto, propiedad) {
herencia var;
if (object.hasownproperty (propiedad))
herencia = "local";
demás
herencia = "herencia";
document.writeLn (propiedad+":"+herencia+":"
+objeto [propiedad]);
}
Verifique qué versión de JavaScript es compatible con el navegador:
La copia del código es la siguiente:
<! DocType html public "-// w3c // dtd xhtml 1.0 Transitional // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transicional.dtd ">
<html xmlns = "http://www.w3.org/1999/xhtml">
<Evista>
<meta http-equiv = "content-type" content = "text /html; charset = utf-8" />
<title> La versión JavaScript del navegador admite pruebas </title>
</ablo>
<Body>
<script language = "javaScript">
//document.write("your Browser Type: "+Navigator.appname+" <br/> ");
//document.write("Browser Version: "+Navigator.Appversion+" <br/> ");
// Los navegadores que admiten JavaScript 1.0 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.0 <br/>');
</script>
<script language = "javaScript1.1">
// navegadores que admiten JavaScript 1.1 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.1 <br/>');
</script>
<script language = "javaScript1.2">
// Los navegadores que admiten JavaScript 1.2 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.2 <br/>');
</script>
<script language = "javaScript1.3">
// navegadores que admiten JavaScript 1.3 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.3 <br/>');
</script>
<script language = "javaScript1.4">
// Los navegadores que admiten JavaScript 1.4 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.4 <br/>');
</script>
<script language = "javaScript1.5">
// Los navegadores que admiten JavaScript 1.5 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.5 <br/>');
</script>
<script language = "javaScript1.6">
// navegadores que admiten JavaScript 1.6 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.6 <br/>');
</script>
<script language = "javaScript1.7">
// Los navegadores que admiten JavaScript 1.7 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.7 <br/>');
</script>
<script language = "javaScript1.8">
// navegadores que admiten JavaScript 1.8 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.8 <br/>');
</script>
<script language = "javaScript1.9">
// navegadores que admiten JavaScript 1.9 pueden ejecutar este script
document.write ('Este navegador admite JavaScript1.9 <br/>');
</script>
</body>
</html>