Дэвид Флэнаган
Книга конечно очень хорошая и качественная. Но иногда встречаются просто глупые опечатки. Тестируешь код а потом ломаешь голову почему это не работает.
Например
switch(n) {
case 1: // Выполняется, если n == 1
// Исполняем блок кода 1.
break; // Здесь останавливаемся
case 2: // Выполняется, если n == 2
// Исполняем блок кода 2.
break; // Здесь останавливаемся
case 3: // Выполняется, если n == 3
// Исполняем блок кода 3.
break; // Здесь останавливаемся
default: // Если все остальное не подходит...
// Исполняем блок кода 4.
break; // Здесь останавливаемся
}
Вот пример работы switch из книги. Однако! Блоки кода выполняются не если n==1(2,3 нужное подчеркнуть) а если n===1(2,3); Или вот еще break: имя_метки; Так описан синтаксис break с именем метки. Однако двоеточия там быть не должно. Почитал соседние топики. Абсолютно глупая фраза. Толи это ошибка перевода и он имел ввиду что-то другое то ли я ни чего не понимаю Цитата:
|
Кстати я пообещал себе купить бумажный вариант книги как только сделаю первый сайт на заказ:D
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
{ key: value }
, а под массивом [val1,val2,val3] или var[int index] = val А так, как в js объектами являются еще и Date, RegExp, Function, то автор пытается не запутать читателя, который возможно пришел из языка в котором объекты это объекты а массивы это массивы, а ассоциативные массивы это ассоциативные массивы, а не объекты. |
Цитата:
|
Наверное ты уже разобрался, но все же напишу, не надо делать ===
просто можно в кавычки значения поставить.
switch(n) {
case '1': // Выполняется, если n == 1
// Исполняем блок кода 1.
break; // Здесь останавливаемся
case '2': // Выполняется, если n == 2
// Исполняем блок кода 2.
break; // Здесь останавливаемся
case '3': // Выполняется, если n == 3
// Исполняем блок кода 3.
break; // Здесь останавливаемся
default: // Если все остальное не подходит...
// Исполняем блок кода 4.
break; // Здесь останавливаемся
}
А вообще мне Давид Флэнаган нравится, но нужно такое усилие, чтобы это читать, примеры не очень я бы сказал, впечатление такое, что он просто спешил, и не успевал, нормальное придумывать. Хотя если учесть какие другие книги, то это просто супер. |
mycoding,
Что-то я не понял вашу мысль.
var n = 1;
switch(n) {
case '1': alert(1); break;
case '2': alert(2); break;
default: alert("def");
}
И что же выдаст скрипт? А вы говорите "Выполняется, если n == 1" |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
var obj = new String('');
false===obj ? alert('false') : alert('true'); // true
str = '';
false===str ? alert('false') : alert('true'); // true
По поводу ошибка не ошибка. 2 это цифра и тип у неё number, n==2 правильно. |
тогда уж
if( '' )
alert('пустая строка');
if( new String('') )
alert('обьект-обертка');
правда непонятно, почему там упоминаются непустые объекты UPD: null похоже имеется в виду |
Цитата:
В книге дальше имеется таблица 3.3. Там все и описывается окончательно. Мне больше нравится творчество перевода в примере 15.5 и демонстрации картинки к нему. (стр 340) |
Спасибо вам как всегда :D
|
Гозар не понял вашего примера я и так знал что new String("") !== false;
|
Цитата:
Но зато с приведением - равно:
if (new String('')==false) alert('равно')
if (new String('1')==true) alert('равно')
|
Запутался почему тогда
if( new String('') ) true |
Цитата:
Картинки просто местами перепутаны. Могу предположить, что не переводчиком, а издателем. |
Цитата:
http://javascript.ru/ecma/part9#a-9.2 А вообще, насколько я понял, почитав http://javascript.ru/ecma/part11#a-11.9.3, начиная с 16 пункта сравнения все превращается в числа. И потом сравниваются числа. Если ошибаюсь, поправьте меня. |
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 Вот так я это вижу. |
Логично
|
Цитата:
if (new String('')==false) - а тут работает оператор == и правила его работы - особенные (стр 85 все подробно описано) |
Да я их даже в тетрадку переписал дня 3 назад. Просто сразу не вкупил
|
Цитата:
Тогда эти две операции были бы эквивалентны: if(expr) ... // и if(expr == true) ...А в действительности получается, что они не эквивалентны. |
А зачем две эквивалентных операции?
|
Цитата:
В первый раз я говорю: если выражение правда, то сделать то-то. Во второй раз я говорю: если выражение равно правде, то сделать то-то. По мне так это одно и то же. |
Нет не кажется
|
Цитата:
Ведь тут new String('')==false получается: сначала false в 0 потом объект в пустую строку и пустая строка в 0. Не забываем что своим объектам можно переопределять метод valueOf и кто знает тогда как он будет сравниваться например со строкой или числом. |
Цитата:
Цитата:
|
Почему в литерале объекта
{L:function(){}}
и
{"L":5}
syntax error, а
var bla={L:function(){}}
и
var bla={"L":5}
нету ошибки? |
[] и {} - создание массива и обьекта и это создание должно кудато сохранится....
|
Ты не понял {l:"l"} нету ошибки
Ошибка когда значение свойства-функция или когда имя свойства-строка Цитата:
|
Цитата:
({"L": 5})
|
А поподробней?=)
|
Поточнее я могу только послать в стандарт ECMAScript читать грамматику. Или обратиться, например, к Дмитрию Сошникову, которые лучше меня объясняет подобные вещи.
|
Цитата:
P.S. Вспоминаем анонимные function expression, которые никуда не сохраняются. |
Ну тогда просто запомню что нужно либо в скобки брать либо присваивать переменной
Потом почитаю его статьи. Я так мельком глянул очень интересные, хотя конечно не мой уровень |
Цитата:
{"x":5}
, это инструкция(наподобие if{}).А инструкция выполняется в зависимости от условия, а условие в данном случае отсутствует, поэтому происходит нарушение синтаксиса и выводится ошибка. Если же взять в круглые скобки, то это уже выражение, а оно вычисляется сразу и условие ему не нужно. |
Цитата:
{
alert('Я выполняюсь'); alert('И я');
var i = 0;
i++;
alert('i=' + i)
}
|
Цитата:
{alert(1);}
|
| Часовой пояс GMT +3, время: 15:14. |