false, true - это объект?
Как-то попробовал взять свойство у false, к пример:
false.aи получил undefined Тогда решил посмотреть и обнаружил, что false это не примитив, а объект (если я правильно все понимаю), у которого есть конструктор Boolean(). Но одновременно false instanceof Boolean Выдает false Получается false не является экземпляром Boolean. И теперь я плохо понимаю как это устроено. Был бы рад, если кто-нибудь объяснит. Или укажет пальцем мне в документацию, потому что я там не нашел (либо плохо искал). Уточню вопрос: У false есть свойство constructor. ![]() И вопрос в том, откуда у примитивного типа поведение объекта? Ответ на вопрос: http://habrahabr.ru/post/150730/ |
булы, числа и строки - элементарные типы.
для них есть объектные обертки. вкратце тут http://javascript.ru/basic/types ещё глянь http://dmitrysoshnikov.com/ecmascrip...umber-obyektyi |
Честно говоря, обе эти статьи мало чем помогли разобраться.
То что есть объектные обертки - это я писал выше. Там написано про примитивы: Цитата:
alse.constructor function Boolean() { [native code] } Как я понимаю, конструктор всё-таки есть. Я бы почитал про объектное поведение примитива, зачем это так реализовано, и почему в конкретном true/false в свойстве prototype отсутствует ссылка на родителя (Boolean). |
Да, и еще такой нюанс, в консоли:
false.__proto__ Boolean {} Получение свойства .__proto__ не очень красиво, но chrome мне его отдал, и мы видим, что есть прототип. |
Попробую показать вам на примере, думаю так будет понятнее:
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); |
Цитата:
|
Цитата:
|
Да немного не понятно написал:)
Вот нашёл, тут вроде нормально разжевали. |
Вопрос собственно больше в другом, откуда у примитивного типа поведение объекта?
|
Объяснение нашел вот здесь:
http://habrahabr.ru/post/150730/ |
Часовой пояс GMT +3, время: 17:13. |