29.04.2010, 11:07
|
Интересующийся
|
|
Регистрация: 08.11.2009
Сообщений: 28
|
|
почему примитивные типы не объекты?
В общем вопрос в названии темы. Урыл энное количество времени из-за бага в строке
this._appendToRow(row, typeof this.ocot[i] == "undefned" ? "\u00a0" : this.nts(this.ocot[i]));
ну и в голову полезли мысли на тему...
Вопрос не в том, что нужно было сразу писать x == undefined, а в том, что typeof вообще существует, что очепятка приводит к багу (а вроде бы сейчас хотят добавить возможность создавать пользовательские типы, что вообще будет тогда), что Number - это враппер а не суперкласс, со всей присущей ему путаницей. Почему именно так, а не попроще, я что-то упускаю?
|
|
29.04.2010, 11:34
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Сообщение от Kfuse
|
что очепятка приводит к багу
|
Ппц, а Вы что, хотели интеллектуальный супер-пупер-парсер, у которого в конфиге прописано telepate_mode=on, и он сам разруливает говнокод?
Сообщение от Kfuse
|
Number - это враппер а не суперкласс, со всей присущей ему путаницей.
|
А где путаница? Разве что в голове...
|
|
29.04.2010, 12:01
|
Интересующийся
|
|
Регистрация: 08.11.2009
Сообщений: 28
|
|
Цитата:
|
Ппц, а Вы что, хотели интеллектуальный супер-пупер-парсер
|
А что такого интеллектуального если было бы 43 instanceof Number или idontexist instanceof undefined?
В дублировании. Чем отличаются new Number(42) и 42? Только тем что одно отзывается на typeof другому нужен instanceof. Зачем такие братья-близнецы? И само наличие двух функций для проверки типа, плюс необходимость использования строк вместо имён тоже не гут.
Цитата:
|
Разве что в голове...
|
Ну это да, куда ж без подобных ремарок.
|
|
29.04.2010, 12:10
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Сообщение от Kfuse
|
А что такого интеллектуального если было бы 43 instanceof Number или idontexist instanceof undefined?
|
Потому что idontexist не существует, и Вы получите ReferenceError. 43 - примитивный тип. Хотите получить одинаковое поведение и для объекто Number, и для примитивов --
typeof 43 //number
typeof (new Number(43)).valueOf() //number
Сообщение от Kfuse
|
Ну это да, куда ж без подобных ремарок.
|
Естественно. Вся путаница обычно там. Вы пришли из другого языка, и Вам хочется, чтобы все было так, как Вам хочется. JS - такой JS, он не похож на C(++) или на Delphi.
|
|
29.04.2010, 12:29
|
Интересующийся
|
|
Регистрация: 08.11.2009
Сообщений: 28
|
|
Цитата:
|
Вы пришли из другого языка
|
Я не из какого языка не приходил, и javascript пользую for fun ну и так по мелочи.
Цитата:
|
Хотите получить одинаковое поведение
|
Нет, я хочу узнать, почему я вообще должен хотеть получить унифицированное поведение, а его нет. Никаких объяснений кроме того, что так было содрано с Джавы мне в голову не приходит. Только опять же вопрос, что будет дальше?
|
|
29.04.2010, 12:36
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Kfuse, читайте спеку?
Цитата:
|
4.3.2 Элементарное значение
Элементарное значение - значение одного из типов Undefined, Null, Boolean, Number или String. Элементарное значение - единица данных, представляемая напрямую на самом нижнем уровне реализации языка.
4.3.3 Объект
Объект - элемент типа Object. Представляет собой неупорядоченный набор свойств, каждое из которых содержит элементарное значение, объект или функцию. Функция, хранимая в свойстве объекта, называется методом.
|
Честно говоря, нет никакого желания общаться на эту тему. Так написано в спецификации, так реализовано в движках браузеров. К чему тогда вопросы? for fun?
|
|
29.04.2010, 12:37
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Kfuse
|
Только опять же вопрос, что будет дальше?
|
А что будет дальше?
|
|
29.04.2010, 12:54
|
Интересующийся
|
|
Регистрация: 08.11.2009
Сообщений: 28
|
|
Цитата:
|
К чему тогда вопросы?
|
Ни к чему. Спрашивать вообще вредно.
Цитата:
|
А что будет дальше?
|
Дальше будут пользовательские типы которые будут вести себя как примитивные. Тоесть будет больше typeof, или они будут объектами? Тогда почему текущие примитивные типы тоже не сделать объектами?
Хотя ещё раз, мне интересно, почему так вообще было сделано, почему JS такой, почему так написано в спецификации, почему вместо единой системы типов их две? Мне интересно возможное обоснование этой как мне видится ненужной усложнённости.
|
|
29.04.2010, 12:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Kfuse
|
Дальше будут пользовательские типы которые будут вести себя как примитивные.
|
Откуда они возьмутся-то? Да даже если возьмутся, это будет очень не скоро.
З.Ы. Надо вас добить.
if (new Boolean(false)) {
alert('true');
}
|
|
29.04.2010, 13:04
|
Интересующийся
|
|
Регистрация: 08.11.2009
Сообщений: 28
|
|
Цитата:
|
Откуда они возьмутся-то? Да даже если возьмутся, это будет очень не скоро.
|
В каком-то видео кто-то говорил. Кто-то не из последний личностей в JS мире.
Да-да, "JS - такой JS, он не похож..."
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Объекты в массиве. |
delias |
Общие вопросы Javascript |
2 |
21.04.2010 22:28 |
|
|
|