Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2013, 18:09
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

false, true - это объект?
Как-то попробовал взять свойство у false, к пример:
false.a
и получил
undefined

Тогда решил посмотреть и обнаружил, что false это не примитив, а объект (если я правильно все понимаю), у которого есть конструктор Boolean().

Но одновременно
false instanceof Boolean

Выдает
false

Получается false не является экземпляром Boolean.

И теперь я плохо понимаю как это устроено. Был бы рад, если кто-нибудь объяснит. Или укажет пальцем мне в документацию, потому что я там не нашел (либо плохо искал).

Уточню вопрос:
У false есть свойство constructor.

И вопрос в том, откуда у примитивного типа поведение объекта?

Ответ на вопрос:
http://habrahabr.ru/post/150730/

Последний раз редактировалось ilja209, 27.08.2013 в 13:00. Причина: Уточнение:
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2013, 18:47
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

булы, числа и строки - элементарные типы.
для них есть объектные обертки.
вкратце тут http://javascript.ru/basic/types
ещё глянь http://dmitrysoshnikov.com/ecmascrip...umber-obyektyi
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2013, 09:41
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Честно говоря, обе эти статьи мало чем помогли разобраться.
То что есть объектные обертки - это я писал выше.

Там написано про примитивы:
Цитата:
Данные значения в реализации представляются напрямую на низком уровне. Они не являются объектами, у них нет прототипов, равно как и конструкторов.
Но вот, что мы имеет в консоли:
alse.constructor
function Boolean() { [native code] }

Как я понимаю, конструктор всё-таки есть.

Я бы почитал про объектное поведение примитива, зачем это так реализовано, и почему в конкретном true/false в свойстве prototype отсутствует ссылка на родителя (Boolean).
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2013, 09:49
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Да, и еще такой нюанс, в консоли:
false.__proto__
Boolean {}


Получение свойства .__proto__ не очень красиво, но chrome мне его отдал, и мы видим, что есть прототип.
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2013, 10:55
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Попробую показать вам на примере, думаю так будет понятнее:
alert(false instanceof Boolean);
alert((new Boolean('false')) instanceof Boolean);

аналогично
alert('' instanceof String);
alert((new String('')) instanceof String);

Суть в том, что объект Boolean и остальные типы данных не являются теми объектами которые создаются из этих литералов, используйте typeof, если необходимо сравнить тип, а не принадлежность к объекту.

Но это не работает только с примитивами.
alert([] instanceof Array);
alert([] instanceof Object);
__________________
.

Последний раз редактировалось Skipp, 27.08.2013 в 11:19.
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2013, 11:33
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Цитата:
Суть в том, что объект Boolean и остальные типы данных не являются теми объектами которые создаются из этих литералов
Я слабо понял смысл этой фразы.
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2013, 11:34
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Цитата:
alert([] instanceof Array);
alert([] instanceof Object);
Они как раз возвращают true
Ответить с цитированием
  #8 (permalink)  
Старый 27.08.2013, 11:49
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Да немного не понятно написал
Вот нашёл, тут вроде нормально разжевали.
__________________
.
Ответить с цитированием
  #9 (permalink)  
Старый 27.08.2013, 12:04
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Вопрос собственно больше в другом, откуда у примитивного типа поведение объекта?
Ответить с цитированием
  #10 (permalink)  
Старый 27.08.2013, 13:00
Новичок на форуме
Отправить личное сообщение для ilja209 Посмотреть профиль Найти все сообщения от ilja209
 
Регистрация: 29.03.2013
Сообщений: 9

Объяснение нашел вот здесь:
http://habrahabr.ru/post/150730/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно использовать координаты синтетического события. Dim@ Оффтопик 19 20.07.2012 03:35
относительная высота zmaxon ExtJS 13 04.10.2010 12:42
Restful посылает POST вместо DELETE Gant ExtJS 11 06.08.2010 12:11
буфер обмена в Firefox KOLANICH Общие вопросы Javascript 4 01.07.2010 18:12
Регулярка: выдает true, но не хочет давать false Trojan Общие вопросы Javascript 9 16.06.2009 12:23