Дэвид Флэнаган
Книга конечно очень хорошая и качественная. Но иногда встречаются просто глупые опечатки. Тестируешь код а потом ломаешь голову почему это не работает.
Например 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, время: 04:16. |