![]() |
|
||||||||||
|
|||||
|
[+1 18.03.08]
Регистрация: Nov 2006
Сообщений: 223
|
Сделал в коде смешную опечатку - не там поставил скобочку.
В результате оператор || применился для стринга и булена. Решил посмотреть, а как на самом деле он будет работать для этих операндов и обнаружил какую-то странную логику... Для начала банальная проверка: Напишет true. Теперь мистика: Напишет true. Напишет false. Как так? |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 256
|
видимо false преобразовывается в строку с которой ''Hello" уже и сравнивается.
|
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
По идее должно писать "Hello". Очень странно. Сравните:
str = "Hello"; str2 = ""; trace( str || "defaultValue" ); //Hello trace( str2 || "defaultValue"); //defaultValue Для цифр все правильно: Оператор возвращает первый операнд, если Boolean от него true, и второй если false. Тип переменной при этом не меняется. Очень, кстати, удобно. upd: trace( String("Hi") || "defaultValue" ); //Hi
trace( String("") || "defaultValue"); //defaultValue
trace( new String("Hi") || "defaultValue" );//Hi
trace( new String("") || "defaultValue"); // (пустая строка)
(PS - смотрел в 8-ке) Последний раз редактировалось Kikasso; 06.07.2007 в 02:16. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это компилятор чудит, в swf вообще не попадает строка с Hello. Так что перестаньте заниматься фигней
![]() |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
С такой, что действуют разные условия. Для сравнения приведу результаты для разных версий
/*
[1-6] [7-...]
1. false true trace(Boolean("Hello"))
2. ok, true ok, true if("Hello") trace( "ok, true" );
3. no yes, sure trace( "Hello" ? "yes, sure" : "no" );
4. ...oops Hello trace (String("Hello") || "...oops");
5. ...oops ...oops trace ("Hello" || "...oops");
*/
Цитата:
то результатом будет false, а в 8-ке соответственно true 3. Здесь тоже самое, что в пункте 2, за исключением того, что флеш 8 с публикацией под 6-ку, на этот раз корректно проводит преобразование в false. Тут стоит заметить, что в отличии от if else который при сравнении с литералом в байт код записал только результат, конструкция ? : в байт код переводит весь ас-код. 4. Тоже самое, что и в пункте 1. 5. Самое хитрое Если заглянуть в хелп, то увидимЦитата:
Последний раз редактировалось iNils; 06.07.2007 в 09:52. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Да, я смотрел руководство по 5-му пункту, злое наследие царского режима )).
С публикацией под 6-ку опыты тоже проделывал, только MX не ставил. Ладно, то что от него требуется этот оператор делает. Логическое OR отрабатывает, значение "по умолчанию" вместо undefined подставляет. Очень удобно в конструкции: Если path_to_xml должен прийти из flashvars или откуда-то ещё. До 7-ки так можно подставлять только цифры.. Последний раз редактировалось Kikasso; 06.07.2007 в 10:07. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|