В процессе написания программы JS вам часто потребуется судить тип объекта. Например, если вы пишете функцию, вам нужно написать другой код, оценивая различные типы параметров.
Во -первых, вы можете подумать об операторе TypeOF и увидеть следующий пример:
<script type = "text/javascript"> var object = {}; var b = true; Alert (TypeOf объект + "" + typeOF B); </script>Полученные результаты следующие:
Из приведенных выше результатов мы видим, что тип объекта может отображаться с помощью оператора TypeOF. Так что же будет результатом масштаба оператора типа нулевого и неопределенного?
/*var object = {}; var b = true; ALERT (TypeOf объект + "" + typeof B);*/ alert (typeOf null + "" + typeof undefined)Оператор TypeOF действует на NULL и на самом деле отображает «объект» (это кажется ненаучным, я думал, что он отображает «NULL») и неопределенные дисплеи «неопределенные» (это соответствует результату, который мы надеемся). Поэтому при использовании оператора TypeOF для оценки типа объекта будьте особенно осторожны, потому что этот объект может быть нулевым. Вышеуказанное дает только некоторые результаты типа, действующего на эти объекты. В следующей таблице перечислены результаты оператора TypeOF, действующего на логин, номер, строку, массив, дата, regexp, объект, функция, нулевая, неопределенная (заинтересованные читатели могут проверить его самостоятельно):
Из результатов приведенной выше таблицы мы видим, что массив, дата и повторная экспоната отображают все объекты, так почему бы не отобразить тип объекта? Это требует, чтобы другой оператор был получен из JS: экземпляр оператора, который используется для определения того, является ли объект объектом некоторых типов, а рассчитанное значение является истинным или ложным. Давайте сначала посмотрим:
var теперь = new Date (); var pattern =/^[/s/s]*$/; var names = ['ZQ', 'John']; Alert ((теперь экземпляр DATE) + "" + (экземпляр REGEXP) + "" + (Имена instanceOf массива));
Очевидно, что тип объекта можно оценить через этот экземпляр, но это может судить только другие типы, за исключением основного типа (включая тип строки), и он не может судить о основном типе. Тем не менее, экземпляр не всегда может быть оценен нормально. Учитывая случай структуры, чтобы определить, что объектом его типа является объект, передаваемый другим кадром, сначала посмотрите на следующий пример.
Main.html
<! Doctype html> <html lang = "en"> <head> <title> main </title> </head> <frameset cols = "45%,*"> <кадр name = "crame1" src = "frame1.html"/> <frame name = "frame2" src = "frame2.html"/> </html> </ht> </ht> </ht> </ht> </ht> </ht>
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 = "fourene: #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 ancementof array:" + (top.frame1.name ancessionof array); document.write ("<br/>"); document.write ("top.frame1.names ancementof top.frame1.array:" + (top.frame1.names ancementof top.frame1.array)); document.write ("<br/>"); document.write ("top.frame1.array === top.frame2.array?" + (top.frame1.array === top.frame2.array)); </script> </head> <body style = "facken: #747474"> </body> </html>Объект имен находится в Frame1 Framework и создается массивом Frame1 Framework. Если объект имен поступает в массив в Frame2 для сравнения, очевидно, что имена не являются экземпляром массива в Frame2. Считается, что Frame1 и Frame2 не одинаковы и вообще массивы. Из второго реалистичного результата можно ясно видеть, что имена являются экземпляром рамы, где он находится. С третьего вывода видно, что массив Frame1 и массив Frame2 различны. Итак, что мне делать, если я столкнулся с приведенным выше сравнением перекрестной рамы? Мы не можем сравнивать массив, соответствующий структуре каждый раз. Существует необходимый способ решить вышеуказанную проблему. Смотрите следующий код:
var toString = {} .toString; var теперь = new Date (); Alert (toString.call (Now)){}. Вызов наиболее нативного ToString () метода объекта Date (этот метод является методом выше объекта) может отображать строку типа [дата объекта]. Если это массив, будет сгенерировано слово [массив объектов]. То есть выполнение вышеуказанных операций будет отображать слова, похожие на [класс объектов]. Итак, нам просто нужно судить эту строку, чтобы узнать его тип? Из этого вы можете написать следующий класс инструментов:
инструменты
var Tools = (function (undefined) {var class2type = {}, toString = {} .toString; var fun = {type: function (obj) {return obj === null || obj === undefined? fun.type (obj) === "Array"; i <arr.length; });Инструменты предоставляют такие методы, как тип, isarray, Isfunction и т. Д., Чтобы оценить тип объекта. Согласно фактическим потребностям, вы можете добавить методы, чтобы определить тип самостоятельно. Тип принимает параметр OBJ, который возвращает фактический тип объекта в строчной форме. Например, если вам нужно судить, что тип объекта является массивом, то этот метод вернет массив.
Согласно приведенному выше классу инструментов, переписывайте приведенный выше пример:
Fram2.html
<! Doctype html> <html lang = "en"> <head> <meta charset = "UTF-8"> <Title> Frame2 </tit (top.frame1.names ancessionof массива)); document.write ("<br/>"); document.write ("top.frame1.names ancementof top.frame1.array:" + (top.frame1.names ancementof top.frame1.array)); document.write ("<br/>"); document.write ("top.frame1.array === top.frame2.array?" + (top.frame1.array === top.frame2.array)); document.write ("<br/>"); document.write ("tools.isarray (top.frame1.names)?" + tools.isarray (top.frame1.names)); </script> </head> <body style = "facken: #747474"> </body> </html>На этом этапе тип объекта может быть легко оценен при вышеуказанном классе.
Примечание. В IE, такие элементы, как оповещение, не могут быть оценены.