Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Дэвид Флэнаган (https://javascript.ru/forum/offtopic/7281-dehvid-flehnagan.html)

x-yuri 31.01.2010 11:05

тогда уж
if( '' ) 
    alert('пустая строка');
if( new String('') ) 
    alert('обьект-обертка');

правда непонятно, почему там упоминаются непустые объекты
UPD: null похоже имеется в виду

micscr 31.01.2010 12:07

Цитата:

Сообщение от x-yuri (Сообщение 42919)
UPD: null похоже имеется в виду

Да походу про null хотя null не является объектным типом (несмотря на typeof(null))
В книге дальше имеется таблица 3.3. Там все и описывается окончательно.

Мне больше нравится творчество перевода в примере 15.5 и демонстрации картинки к нему. (стр 340)

Niar 31.01.2010 12:40

Спасибо вам как всегда :D

Niar 31.01.2010 12:47

Гозар не понял вашего примера я и так знал что new String("") !== false;

micscr 31.01.2010 12:58

Цитата:

Сообщение от Niar (Сообщение 42929)
Гозар не понял вашего примера я и так знал что new String !== false

впрочем true оно тоже эквивалентно никак не равно. Т.к. одно это объект, а другое - значение логического типа.
Но зато с приведением - равно:
if (new String('')==false) alert('равно')

if (new String('1')==true) alert('равно')

Niar 31.01.2010 13:02

Запутался почему тогда
if( new String('') ) true

Мараторий 31.01.2010 13:12

Цитата:

Сообщение от micscr (Сообщение 42925)
Мне больше нравится творчество перевода в примере 15.5 и демонстрации картинки к нему. (стр 340)

А что там с переводом не так?
Картинки просто местами перепутаны. Могу предположить, что не переводчиком, а издателем.

Мараторий 31.01.2010 13:16

Цитата:

Сообщение от Niar (Сообщение 42931)
Запутался почему тогда
if( new String('') ) true

Потому, что new String('') - это объект. Все объекты при преобразовании к логическому типу превращяются в true.
http://javascript.ru/ecma/part9#a-9.2


А вообще, насколько я понял, почитав http://javascript.ru/ecma/part11#a-11.9.3, начиная с 16 пункта сравнения все превращается в числа. И потом сравниваются числа. Если ошибаюсь, поправьте меня.

Niar 31.01.2010 13:23

if (new String('')==false) alert('равно')
Ну а тут false то почему

Мараторий 31.01.2010 13:30

Цитата:

Сообщение от Niar (Сообщение 42935)
if (new String('')==false) alert('равно')
Ну а тут false то почему

Черт. Точно. Вы правы.
При сравнении объекта и логического выражения.
Логическое false "превращается" в 0
Объект сначала "превращается" в ToPrimitive(object)
Потом этот результат переходит в число ToNumber(ToPrimitive(object))

Видимо ToPrimitive(new String('')) -> ""
ToNumber(ToPrimitive(new String(''))) = ToNumber("") -> 0
ToNumber(false) -> 0

0 === 0

Вот так я это вижу.


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