Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   почему примитивные типы не объекты? (https://javascript.ru/forum/misc/9103-pochemu-primitivnye-tipy-ne-obekty.html)

Kfuse 29.04.2010 11:07

почему примитивные типы не объекты?
 
В общем вопрос в названии темы. Урыл энное количество времени из-за бага в строке
this._appendToRow(row, typeof this.ocot[i] == "undefned" ? "\u00a0" : this.nts(this.ocot[i]));
ну и в голову полезли мысли на тему...
Вопрос не в том, что нужно было сразу писать x == undefined, а в том, что typeof вообще существует, что очепятка приводит к багу (а вроде бы сейчас хотят добавить возможность создавать пользовательские типы, что вообще будет тогда), что Number - это враппер а не суперкласс, со всей присущей ему путаницей. Почему именно так, а не попроще, я что-то упускаю?

e1f 29.04.2010 11:34

Цитата:

Сообщение от Kfuse (Сообщение 53513)
что очепятка приводит к багу

Ппц, а Вы что, хотели интеллектуальный супер-пупер-парсер, у которого в конфиге прописано telepate_mode=on, и он сам разруливает говнокод?

Цитата:

Сообщение от Kfuse (Сообщение 53513)
Number - это враппер а не суперкласс, со всей присущей ему путаницей.

А где путаница? Разве что в голове...

Kfuse 29.04.2010 12:01

Цитата:

Ппц, а Вы что, хотели интеллектуальный супер-пупер-парсер
А что такого интеллектуального если было бы 43 instanceof Number или idontexist instanceof undefined?

Цитата:

А где путаница?
В дублировании. Чем отличаются new Number(42) и 42? Только тем что одно отзывается на typeof другому нужен instanceof. Зачем такие братья-близнецы? И само наличие двух функций для проверки типа, плюс необходимость использования строк вместо имён тоже не гут.

Цитата:

Разве что в голове...
Ну это да, куда ж без подобных ремарок.

e1f 29.04.2010 12:10

Цитата:

Сообщение от Kfuse (Сообщение 53530)
А что такого интеллектуального если было бы 43 instanceof Number или idontexist instanceof undefined?

Потому что idontexist не существует, и Вы получите ReferenceError. 43 - примитивный тип. Хотите получить одинаковое поведение и для объекто Number, и для примитивов --
typeof 43 //number
typeof (new Number(43)).valueOf() //number


Цитата:

Сообщение от Kfuse (Сообщение 53530)
Ну это да, куда ж без подобных ремарок.

Естественно. Вся путаница обычно там. Вы пришли из другого языка, и Вам хочется, чтобы все было так, как Вам хочется. JS - такой JS, он не похож на C(++) или на Delphi.

Kfuse 29.04.2010 12:29

Цитата:

Вы пришли из другого языка
Я не из какого языка не приходил, и javascript пользую for fun ну и так по мелочи.

Цитата:

Хотите получить одинаковое поведение
Нет, я хочу узнать, почему я вообще должен хотеть получить унифицированное поведение, а его нет. Никаких объяснений кроме того, что так было содрано с Джавы мне в голову не приходит. Только опять же вопрос, что будет дальше?

e1f 29.04.2010 12:36

Kfuse, читайте спеку?
Цитата:

4.3.2 Элементарное значение

Элементарное значение - значение одного из типов Undefined, Null, Boolean, Number или String. Элементарное значение - единица данных, представляемая напрямую на самом нижнем уровне реализации языка.
4.3.3 Объект

Объект - элемент типа Object. Представляет собой неупорядоченный набор свойств, каждое из которых содержит элементарное значение, объект или функцию. Функция, хранимая в свойстве объекта, называется методом.
Честно говоря, нет никакого желания общаться на эту тему. Так написано в спецификации, так реализовано в движках браузеров. К чему тогда вопросы? for fun?

Kolyaj 29.04.2010 12:37

Цитата:

Сообщение от Kfuse
Только опять же вопрос, что будет дальше?

А что будет дальше?

Kfuse 29.04.2010 12:54

Цитата:

К чему тогда вопросы?
Ни к чему. Спрашивать вообще вредно.
Цитата:

А что будет дальше?
Дальше будут пользовательские типы которые будут вести себя как примитивные. Тоесть будет больше typeof, или они будут объектами? Тогда почему текущие примитивные типы тоже не сделать объектами?
Хотя ещё раз, мне интересно, почему так вообще было сделано, почему JS такой, почему так написано в спецификации, почему вместо единой системы типов их две? Мне интересно возможное обоснование этой как мне видится ненужной усложнённости.

Kolyaj 29.04.2010 12:56

Цитата:

Сообщение от Kfuse
Дальше будут пользовательские типы которые будут вести себя как примитивные.

Откуда они возьмутся-то? Да даже если возьмутся, это будет очень не скоро.

З.Ы. Надо вас добить.
if (new Boolean(false)) {
    alert('true');
}

Kfuse 29.04.2010 13:04

Цитата:

Откуда они возьмутся-то? Да даже если возьмутся, это будет очень не скоро.
В каком-то видео кто-то говорил. Кто-то не из последний личностей в JS мире.
Цитата:

Надо вас добить.
Да-да, "JS - такой JS, он не похож..."


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