JS 프로그램을 작성하는 과정에서 종종 객체의 유형을 판단해야 할 수도 있습니다. 예를 들어 함수를 작성하는 경우 다른 매개 변수 유형을 판단하여 다른 코드를 작성해야합니다.
먼저 연산자 유형을 생각하고 다음 예를 참조하십시오.
<script type = "text/javaScript"> var Object = {}; var b = true; 경고 (Object + "" + Typeof B); </스크립트>얻은 결과는 다음과 같습니다.
위의 결과로부터, 우리는 객체의 유형이 연산자 유형을 사용하여 표시 될 수 있음을 알 수 있습니다. 그렇다면 연산자 유형의 범위의 결과는 NULL 및 정의되지 않은 결과는 무엇입니까?
/*var Object = {}; var b = true; ALERT (Object + "" + Typeof B);*/ Alert (Offeof Null + "" + 타입 Undefined)연산자의 타입은 NULL에서 작용하고 실제로 "객체"를 표시합니다 (이것은 비과학적인 것처럼 보이며 "NULL"을 표시 할 것이라고 생각했습니다) 및 정의되지 않은 표시는 "정의되지 않은"표시됩니다 (이것은 우리가 희망하는 결과를 충족합니다). 따라서 연산자의 타입을 사용하여 물체의 유형을 판단 할 때는이 객체가 무일하게 될 수 있으므로 특히주의하십시오. 위는이 객체에 작용하는 유형의 결과 만 제공합니다. 다음 표는 부울, 숫자, 문자열, 배열, 날짜, regexp, 객체, 기능, null, undle, undle 정의에 따라 행동하는 유형의 결과를 나열합니다.
위 표의 결과에서 배열, 날짜 및 regexp가 모든 객체를 표시하는 것을 볼 수 있으므로 객체 유형을 직접 표시하지 않겠습니까? 이를 위해서는 다른 연산자가 js : instanceof 연산자로부터 파생되어야하며, 이는 객체가 어떤 유형의 객체인지, 계산 된 값이 true 또는 false인지 결정하는 데 사용됩니다. 먼저 살펴 보겠습니다.
var now = 새 날짜 (); var pattern =/^[/s/s]*$/; var names = [ 'zq', 'John']; ALERT ((현재 인스턴스 날짜) + "" + (Pat
분명히, 객체의 유형은이 인스턴스를 통해 판단 될 수 있지만 기본 유형 (문자열 유형 포함)을 제외한 다른 유형 만 판단 할 수 있으며 기본 유형을 판단 할 수는 없습니다. 그러나 인스턴스가 항상 정상적으로 판단 될 수는 없습니다. 프레임 워크의 경우를 고려하여 유형의 객체가 다른 프레임으로 전달되는 객체임을 결정하기 위해 먼저 다음 예를 살펴보십시오.
main.html
<! docType html> <html lang = "en"> <head> <title> main </title> </head> <frameset cols = "45%,*"> <frame name = "src ="frame1.html "/> <frame2"src = "frame2.html"/> </html>
frame1.html
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame1 </title> </head> <script type = "text/javascript"> var names = [ 'riccio zhang', 'zq', 'john']; </script> <body style = "배경 : #ccc"> </body> </html>
frame2.html
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javaScript"> document.write ( "top.frame1.names instanceof array :" + (top.frame1.names array); document.write ( "<br/>"); document.write ( "top.frame1.names instancef.frame1.array :" + (top.frame1.names instancef.frame1.array)); document.write ( "<br/>"); documb </script> </head> <body style = "배경 : #747474"> </body> </html>
이름 객체는 Frame1 프레임 워크에 있으며 Frame1 프레임 워크의 배열에 의해 생성됩니다. 이름 객체가 비교를 위해 Frame2의 배열로 가져 오면 이름이 frame2의 배열 인스턴스가 아님이 분명합니다. Frame1과 Frame2는 전혀 동일하지 않다고 생각됩니다. 두 번째 현실적인 결과에서 이름은 이름이 프레임의 인스턴스라는 것을 분명히 알 수 있습니다. 세 번째 출력에서 프레임 1의 배열과 프레임 2 배열이 다르다는 것을 알 수 있습니다. 위의 크로스 프레임 비교에 직면하면 어떻게해야합니까? 우리는 매번 프레임 워크에 해당하는 배열을 비교할 수 없습니다. 위의 문제를 해결하는 데 필요한 방법이 있습니다. 다음 코드를 참조하십시오.
var toString = {} .ToString; var now = 새 날짜 (); Alert (tostring.call (지금)){} .ToString은 객체 객체 (이 메소드 일 때 객체 객체의 기본 메소드 중 하나)에서 tostring 메소드를 얻는 것을 의미하며, tostring.call (지금)은 Tostring 메소드를 호출하는 것을 의미합니다. 날짜 객체의 가장 기본 toString ()을 호출하는 (이 메소드 위의 메소드) 메소드는 [개체 날짜] 유형을 표시 할 수 있습니다. 배열 인 경우 [객체 배열]라는 단어가 생성됩니다. 즉, 위의 작업을 수행하면 [객체 클래스]와 유사한 단어가 표시됩니다. 그래서 우리는 그 유형을 알기 위해이 문자열을 판단해야합니까? 이것으로부터 다음 도구 클래스를 작성할 수 있습니다.
도구 .JS
var 도구 = (function (undefined) {var class2type = {}, toString = {} .ToString; var fun = {type : function (obj) {return obj === null || obj === undefined? string (obj) : class2type [tostring.call (obj)], isarray (obj) {isarray (obj) {isarray. fun.type (obj) "배열"; I <arr. name.tolowercase ();도구는 객체의 유형을 판단하기 위해 유형, Isarray, Isfunction 등과 같은 방법을 제공합니다. 실제 요구에 따르면, 당신은 스스로 유형을 결정하는 방법을 추가 할 수 있습니다. 유형은 OBJ 매개 변수를 허용하여 실제 유형을 소문자 형태로 반환합니다. 예를 들어, 객체의 유형이 배열이라고 판단 해야하는 경우이 메소드는 배열을 반환합니다.
위에 제공된 도구 클래스에 따르면 위의 예를 다시 작성하십시오.
fram2.html
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> frame2 </title> <script type = "text/javaScript"src = "툴.js"> </script> <script> <script> <text/javascript "> instorme1.names instanme1.name1.name1.name). (top.frame1.names instanceof array); document.write ( "<br/>"); document.write ( "top.frame1.names instancef.frame1.array :" + (top.frame1.names instancef.frame1.array)); document.write ( "<br/>"); documb document.write ( "<br/>"); documb </script> </head> <body style = "배경 : #747474"> </body> </html>
이 시점에서 객체 유형은 위의 클래스에서 쉽게 판단 할 수 있습니다.
참고 : 즉, 경고와 같은 요소를 판단 할 수 없습니다.