배열에는 indexof 메소드가 없으므로 배열에서 요소의 인덱스를 찾는 것이 더 번거 롭습니다. 호출을 용이하게하기 위해 Array.prototype.indexof ()는 프로토 타입 프로토 타입을 통해 확장되며 사용하기에 더 편리합니다. 그러나이 사용자 지수는 배열을 가로 질러 문제가 있습니다.
코드 사본은 다음과 같습니다.
Array.prototype.indexof = function (항목) {
for (var i = 0; i <this.length; i ++) {
if (이 [i] == 항목)
반환 i;
}
반품 -1;
}
그것을 사용할 때는 간단합니다
코드 사본은 다음과 같습니다.
var arr = [1,2,3,4,5];
var index = arr.indexof (1); // 색인 == 0
확장 후 매우 상쾌하고 사용하기 편리하며 조화로운 장면입니다 ...
그러나 한 번은 배열 요소를 반복 할 때 for..in을 사용합니다. 루프는 다른 문제를 일으키고 조화로운 분위기를 깨뜨 렸습니다.
코드 사본은 다음과 같습니다.
var a = [ "Zhang Fei", "Guan Yu", "Liu Bei", "Lu Bu"];
(var p in a) {
document.write (p+"="+a [p]+"<br/>");
}
나는 원래이 네 사람의 이름을 출력하고 싶었지만 결과는 무엇입니까?
출력은 실제로 다음과 같습니다.
코드 사본은 다음과 같습니다.
// 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; } 반환 -1; }
이름을 입력하는 것 외에도 자체 확장 메소드 인덱스를 출력하지만 Firefox는 네 사람의 이름만으로 "정상"이라는 점입니다. 왜 이런 일이 일어나고 있습니까?
그 자체로 확장 된 출력 지수는 이해할 수 있습니다. 결국, .. in은 객체 또는 배열의 모든 요소의 모든 사용자 정의 속성을 반복해야합니다.
그렇다면 왜 Firefox가 아닌가?
정보를 확인한 후, 나는 그것을 깨달았습니다
Array는 이미 JavaScript 1.6 버전의 Array.indexof ()를 지원하는 반면, 내가 사용하는 Firefox는 이미 JavaScript 1.8을 지원하는 버전 3.5입니다. indexof는 고유 한 배열 자체의 방법입니다.
IE는 IE8을 사용하더라도 JavaScript 1.3 버전 만 지원합니다.
따라서 IE8은 Indexof가 "사용자 정의 속성"이라고 생각하지만 Firefox는 자체 기본 지원에 의해 지원되는 고유 속성이라고 생각합니다.
이것이 사실입니까?
실험을 수행하고 MyIndexof로 인덱스를 변경하고 다시 시도하십시오. 결과적으로, 즉, IE와 Firefox는 MyIndexof를 출력하여 이전 요점이 정확하다는 것을 증명합니다.
그러면 또 다른 질문이 온다. 나는 오랫동안 Indexof를 확장했습니다. 이제 많은 프로젝트 코드 가이 방법을 사용하고 있습니다. 이제 배열 자체의 요소를 출력하는 데 사용해야합니다. 러시아 방법으로 확장하지 마십시오. 어떻게해야하나요?
다행히 JavaScript는 HasownProperty 방법을 제공합니다.
설명을 살펴보십시오.
코드 사본은 다음과 같습니다.
객체에서 내려온 모든 객체는 hasownproperty 메소드를 상속합니다. 이 방법은 객체가 지정된 속성을 해당 객체의 직접 특성으로 지정된 속성을 갖는지 결정하는 데 사용될 수 있습니다. 연산자와 달리이 방법은 객체의 프로토 타입 체인을 확인하지 않습니다.
설명에서 판단하면 우리가 원하는 것입니다.
...에 ...
코드 사본은 다음과 같습니다.
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 Tutorials", "Herong Yang");
// 기본 프로토 타입 수준에 내장 속성을 덤프합니다
document.writeln ( "/nobject.prototype의 내장 속성 :");
dumpProperty (Object.Prototype, "생성자");
dumpProperty (Object.Prototype, "HasownProperty");
dumpProperty (Object.Prototype, "isprototype");
dumpProperty (Object.Prototype, "Tostring");
dumpProperty (Object.Prototype, "ValueOf");
dumpProperty (Object.Prototype, "Copyright");
// 내 프로토 타입 수준에 내장 속성을 덤프합니다
document.writeln ( "/n ======================/nbook.prototype의 내장 속성 :");
DumpProperty (Book.Prototype, "생성자");
DumpProperty (Book.Prototype, "HasownProperty");
dumpProperty (Book.Prototype, "isprototype");
DumpProperty (Book.Prototype, "Tostring");
DumpProperty (Book.Prototype, "ValueOf");
DumpProperty (Book.Prototype, "Copyright");
// 객체 수준에서 내장 속성을 덤프합니다
document.writeln ( "/n ======================/NMYBook의 내장 속성 :");
DumpProperty (MyBook, "생성자");
DumpProperty (MyBook, "HasOwnProperty");
dumpProperty (MyBook, "isprototype");
DumpProperty (MyBook, "Tostring");
DumpProperty (MyBook, "ValueOf");
DumpProperty (MyBook, "Copyright");
함수 dumpproperty (객체, 속성) {
var 상속;
if (object.hasownproperty (property))
상속 = "로컬";
또 다른
상속 = "상속";
document.writeln (property+":"+inheritance+":"
+객체 [속성]);
}
브라우저에서 지원되는 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>
<body>
<script language = "javaScript">
//document.write("your 브라우저 유형 : "+navigator.appName+"<br/> ");
//document.write("browser 버전 : "+navigator.appversion+"<br/> ");
// JavaScript 1.0을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 JavaScript1.0 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.1">
// JavaScript 1.1을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.1 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.2">
// JavaScript 1.2를 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.2 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.3">
// JavaScript 1.3을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.3 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.4">
// JavaScript 1.4를 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.4 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.5">
// JavaScript 1.5를 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.5 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.6">
// JavaScript 1.6을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.6 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.7">
// JavaScript 1.7을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.7 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.8">
// JavaScript 1.8을 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.8 <br/>'를 지원합니다.
</스크립트>
<script language = "javaScript1.9">
// JavaScript 1.9를 지원하는 브라우저는이 스크립트를 실행할 수 있습니다
document.write ( '이 브라우저는 javaScript1.9 <br/>'를 지원합니다.
</스크립트>
</body>
</html>