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

vasa_c 22.02.2012 19:40

А то что с типами и typeof в JS (и в разных браузерах) ад кромешный, это факт.

DreamTheater 22.02.2012 19:41

Цитата:

Сообщение от vasa_c (Сообщение 159221)
А то что с типами и typeof в JS (и в разных браузерах) ад кромешный, это факт.

И в чем же именно заключаются сложности?

vasa_c 22.02.2012 19:48

Цитата:

И в чем же именно заключаются сложности?
Хэш, порядковый массив и HTML-коллекция это разные структуры данных, но чтобы различить их я должен убиться.
Object.prototype.toString() немного помогает, но кроме одного браузера и я думаю все знают его имя.
Ну и typeof null === "object" тоже круто.

DreamTheater 22.02.2012 19:51

Цитата:

Сообщение от vasa_c (Сообщение 159223)
Хэш, порядковый массив и HTML-коллекция это разные структуры данных, но чтобы различить их я должен убиться.
Object.prototype.toString() немного помогает, но кроме одного браузера и я думаю все знают его имя.
Ну и typeof null === "object" тоже круто.

Все верно, в JS null является объектом без прототипа, соответственно его тип - object.

alert([].constructor === Array);
alert(document.getElementsByTagName('div').constructor === HTMLCollection);

В чем проблема?

Mахmaxmaximus 22.02.2012 19:54

Цитата:

Сообщение от vasa_c
А то что с типами и typeof в JS (и в разных браузерах) ад кромешный, это факт.

Можно примерчик ада? Проверю во всех браузерах.

vasa_c 22.02.2012 19:55

Можно много говорить чем что является с сугубо теоретической точки зрения.
Можно вспомнить аналогии из C++ и Java, что null, это значение объекта, обозначающее его отсутствие.
И вообще подо всё подвести теоретическую базу, откопать ECMA и начать цитировать его, как библию.

Но с точки зрения реальных задач, где требуется узнать что вообще там лежит в этой переменной, зачастую приходится делать кучу грязных хаков и иногда сталкиваться вообще с непостижимым :)

DreamTheater 22.02.2012 19:59

Цитата:

Сообщение от vasa_c (Сообщение 159226)
Можно много говорить чем что является с сугубо теоретической точки зрения.
Можно вспомнить аналогии из C++ и Java, что null, это значение объекта, обозначающее его отсутствие.
И вообще подо всё подвести теоретическую базу, откопать ECMA и начать цитировать его, как библию.

Но с точки зрения реальных задач, где требуется узнать что вообще там лежит в этой переменной, зачастую приходится делать кучу грязных хаков и иногда сталкиваться вообще с непостижимым :)

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

Опять же, можете привести пример одного из "грязных хаков"?

vasa_c 22.02.2012 20:00

Цитата:

Можно примерчик ада? Проверю во всех браузерах.
Например, нужно написать универсальную функцию, которая получает на вход некую структуру и выполняет некоторые действия над всеми её объектами.
Просто итерировани, each() тот же.

Соответственно, простые хэши нужно перебрать по свойствам. Массивы, коллекции, arguments, перебрать по порядку.
Функции и HTMLElement перебирать вообще не нужно, так как это уникальные сущности, а не хранилища данных.

Mахmaxmaximus 22.02.2012 20:01

vasa_c,
я еще раз повторю

Цитата:

с типами и typeof в JS ад кромешный
можно примерчик?

vasa_c 22.02.2012 20:02

Цитата:

То есть с Вашей точки зрения те кто пишут спецификации и разрабатывают языки программирования идиоты, которые просто от нечего делать мешают Вам работать?
Перешли на "сперва добейся"?

Всем сколько нибудь интересующихся историей этих технологий известно как делался этот язык и как писались эти спецификации.

Вы считаете JS идеальным языком?


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