Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятки с оператором typeof (https://javascript.ru/forum/misc/26014-neponyatki-s-operatorom-typeof.html)

nikita.mmf 23.02.2012 17:57

Цитата:

Сообщение от DreamTheater (Сообщение 159433)
Массивы перебираются через
for (var i = 0; i < arr.length; i++)
, можно ведь написать так?

Так нужно написать, об этом ведь и идет речь. Каждый перебор должен вестись согласно типу. Для массивов и массивоподобных( arguments, htmlcollection ) объектов через for( ; ; ), а для объектов через for in.

DreamTheater 23.02.2012 18:09

Цитата:

Сообщение от nikita.mmf (Сообщение 159439)
Так нужно написать, об этом ведь и идет речь. Каждый перебор должен вестись согласно типу. Для массивов и массивоподобных( arguments, htmlcollection ) объектов через for( ; ; ), а для объектов через for in.

Ну вот, а чувак похоже хочет чтобы все решалось применением метода сделатьВсеХорошо().

nikita.mmf 23.02.2012 18:20

DreamTheater,
просто вы привели код с for in, в который по сути необходимо добавить проверку типов.

DreamTheater 23.02.2012 18:28

Цитата:

Сообщение от nikita.mmf (Сообщение 159446)
DreamTheater,
просто вы привели код с for in, в который по сути необходимо добавить проверку типов.

:agree:

vasa_c 23.02.2012 18:50

Цитата:

Сообщение от Mахmaxmaximus
1. Chrome, Opera и Safari в HTMLCollection переберут и свойство length
обманываете

вестимо так!

vasa_c 23.02.2012 18:52

Цитата:

Сообщение от DreamTheater
Ну вот, а чувак похоже хочет чтобы все решалось применением метода сделатьВсеХорошо().

я хочу перебирать словари через for..in, а списки через for (;;), но для этого сначала нужно определить чем является полученная структура. И typeof нам в этом не помогает.

vasa_c 23.02.2012 18:55

Цитата:

Сообщение от Mахmaxmaximus
2. В IE7 у HTMLCollection вообще нет метода hasOwnProperty() - вылетит с ошибкой.
это как то связано с javascript?

это связано с тем, что универсальный кроссбраузерный пример, написанный за минуту не работает.

Mахmaxmaximus 23.02.2012 19:07

Цитата:

Сообщение от vasa_c
И typeof нам в этом не помогает.

конечно, потому что этот оператор не для этого, с чего бы ему помогать:p
Тебе поможет секретное свойство предназначенное для этого)

Mахmaxmaximus 23.02.2012 19:22

Я еще раз всем обьясню:

1)есть типы данных: обьект, строка, число, булиан, андефайнд, function. ВСЕ!

2) тип данных "Обьект" в свою очередь делятся на свои типы(КЛАССЫ):
Массивы, DOM элементы, просто обьекты(словари) , jQuery обьекты и.т.п.

typeof определяет тип данных! обьект не обьект строка не строка, число ли не число.


если ты хочешь оператор который бы возвращал класс обьекта, например "Array" или "DOMelement" то для этого есть специальное волшебное свойство, тебе нужно просто обратится к нему, к свойству в котором лежит строчка с названием класса обьекта.

alert([1,2,3,4,5] .constructor.name)

alert({a:1}  .constructor.name)

alert(document.createElement('a') .constructor.name)

при чем всё выше по типу данных - обьекты.
видишь как все просто)) и операторы не нужны XD

vasa_c 26.02.2012 14:34

Прошу прощения за отсутствие, надеюсь не скучали :)

Цитата:

Сообщение от Mахmaxmaximus
Я еще раз всем обьясню:

Максмаксмаксимус, ты вообще умеешь вести дискуссию без менторского тона?

Цитата:

для этого есть специальное волшебное свойство, тебе нужно просто обратится к нему, к свойству в котором лежит строчка с названием класса обьекта.
В каком пункте нашего любимого ECMA прописано, что данное свойство является стандартом и истинной в последней инстанции для определения класса?
И почему браузеры кладут на этот пункт стандарта?

console.log(document.getElementsByTagName("script").constructor.name);
console.log(document.createElement("div").constructor.name);
console.log(document.createTextNode("text").constructor.name);


Firefox 10.0.2, Ubuntu:
Цитата:

undefined
undefined
undefined
Opera 10.62
Цитата:

Object
Function.prototype
Object
IE под рукой нет, но что-то гложат меня сомнения, что там всё лучше.
Насколько помню, там у DOM-объектов раньше вообще конструкторов и прототипов не было.


Часовой пояс GMT +3, время: 23:14.