24.01.2010, 15:35
|
|
Труъ кодер
|
|
Регистрация: 20.01.2010
Сообщений: 194
|
|
Дэвид Флэнаган
Книга конечно очень хорошая и качественная. Но иногда встречаются просто глупые опечатки. Тестируешь код а потом ломаешь голову почему это не работает.
Например
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 с именем метки. Однако двоеточия там быть не должно.
Почитал соседние топики. Абсолютно глупая фраза. Толи это ошибка перевода и он имел ввиду что-то другое то ли я ни чего не понимаю
Цитата:
|
Прежде всего следует заметить, что попытка преобразования непустых объектов в логическое значение дает в результате значение true. Это справедливо для любых объектов (включая массивы и функции), даже для объектов оберток, которые представляют элементарные типы, при другом способе преобразования дающие значение false.
|
Или например почему он постоянно говорить объекты и массивы. Как будто массивы это не объекты. Нужно говорить в том числе массивы.
Последний раз редактировалось Niar, 25.01.2010 в 11:21.
|
|
28.01.2010, 15:41
|
|
Труъ кодер
|
|
Регистрация: 20.01.2010
Сообщений: 194
|
|
Кстати я пообещал себе купить бумажный вариант книги как только сделаю первый сайт на заказ
|
|
29.01.2010, 10:04
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Niar
|
Или вот еще
break: имя_метки;
|
у меня такого нету, это может быть ошибка какого-нибудь FineReader'а или чем оно там сделано
Сообщение от Niar
|
Прежде всего следует заметить, что попытка преобразования непустых объектов в логическое значение дает в результате значение true. Это справедливо для любых объектов (включая массивы и функции), даже для объектов оберток, которые представляют элементарные типы, при другом способе преобразования дающие значение false.
|
и что тут глупого?
Сообщение от Niar
|
Или например почему он постоянно говорить объекты и массивы. Как будто массивы это не объекты. Нужно говорить в том числе массивы.
|
ну тогда давай цитату
|
|
29.01.2010, 20:17
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от Niar
|
Вот пример работы switch из книги. Однако!
Блоки кода выполняются не если n==1(2,3 нужное подчеркнуть) а если n===1(2,3);
|
на следующей странице через 2 абзаца поясняется что, цитирую дословно: Факт совпадения определяется в соответствии с оператором идентичности ===, а не оператором равенства==, поэтому выражения должны совпадать без какого-либо преобразования типов.
Сообщение от Niar
|
Почитал соседние топики. Абсолютно глупая фраза. Толи это ошибка перевода и он имел ввиду что-то другое то ли я ни чего не понимаю
|
Здесь все нормально, нужно просто понимать о чем речь, это так сказать "фича" js. например в конструкции if сравниваешь объект строку, думаешь щаз она вернет false и условие не выполнится, а она бламс и true и вперед долгие часы дебага
Сообщение от Niar
|
Или например почему он постоянно говорить объекты и массивы. Как будто массивы это не объекты. Нужно говорить в том числе массивы.
|
Здесь делается акцент на различия в конструкциях, под объектом подразумевается конструкция вида
{ key: value }
, а под массивом
[val1,val2,val3] или var[int index] = val
А так, как в js объектами являются еще и Date, RegExp, Function, то автор пытается не запутать читателя, который возможно пришел из языка в котором объекты это объекты а массивы это массивы, а ассоциативные массивы это ассоциативные массивы, а не объекты.
Последний раз редактировалось Gozar, 29.01.2010 в 20:35.
|
|
30.01.2010, 09:38
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,576
|
|
Сообщение от Niar
|
Кстати я пообещал себе купить бумажный вариант книги как только сделаю первый сайт на заказ
|
Вот на этом форуме конкурс намечается. Если знаешь PHP можешь участвовать. Приз там обычно - любая книга.
|
|
30.01.2010, 15:06
|
|
NodeJS developer - ушел
|
|
Регистрация: 06.01.2010
Сообщений: 1,022
|
|
Наверное ты уже разобрался, но все же напишу, не надо делать ===
просто можно в кавычки значения поставить.
switch(n) {
case '1': // Выполняется, если n == 1
// Исполняем блок кода 1.
break; // Здесь останавливаемся
case '2': // Выполняется, если n == 2
// Исполняем блок кода 2.
break; // Здесь останавливаемся
case '3': // Выполняется, если n == 3
// Исполняем блок кода 3.
break; // Здесь останавливаемся
default: // Если все остальное не подходит...
// Исполняем блок кода 4.
break; // Здесь останавливаемся
}
А вообще мне Давид Флэнаган нравится, но нужно такое усилие, чтобы это читать, примеры не очень я бы сказал, впечатление такое, что он просто спешил, и не успевал, нормальное придумывать. Хотя если учесть какие другие книги, то это просто супер.
__________________
Не вижу смысла в своём прибывании на форуме.
Всех достал.
Работу здесь я не найду - хотя не однократно пытался.
Знаний подчерпнуть тоже не могу.
Меняю пароль и адрес электронной почты, чтобы больше никого не доставать.
Всем удачи.
|
|
31.01.2010, 03:36
|
|
Кандидат Javascript-наук
|
|
Регистрация: 22.01.2010
Сообщений: 114
|
|
mycoding,
Что-то я не понял вашу мысль.
var n = 1;
switch(n) {
case '1': alert(1); break;
case '2': alert(2); break;
default: alert("def");
}
И что же выдаст скрипт?
А вы говорите "Выполняется, если n == 1"
|
|
31.01.2010, 07:58
|
|
Труъ кодер
|
|
Регистрация: 20.01.2010
Сообщений: 194
|
|
Цитата:
|
Здесь все нормально, нужно просто понимать о чем речь, это так сказать "фича" js. например в конструкции if сравниваешь объект строку, думаешь щаз она вернет false и условие не выполнится, а она бламс и true и вперед долгие часы дебага
|
Пример можно?
Цитата:
|
на следующей странице через 2 абзаца поясняется что, цитирую дословно: Факт совпадения определяется в соответствии с оператором идентичности ===, а не оператором равенства==, поэтому выражения должны совпадать без какого-либо преобразования типов.
|
Я видел но ошибка то всё равно есть
|
|
31.01.2010, 09:25
|
|
NodeJS developer - ушел
|
|
Регистрация: 06.01.2010
Сообщений: 1,022
|
|
Сообщение от Мараторий
|
mycoding,
Что-то я не понял вашу мысль.
var n = 1;
switch(n) {
case '1': alert(1); break;
case '2': alert(2); break;
default: alert("def");
}
И что же выдаст скрипт?
А вы говорите "Выполняется, если n == 1"
|
Да я ошибся извините )))
__________________
Не вижу смысла в своём прибывании на форуме.
Всех достал.
Работу здесь я не найду - хотя не однократно пытался.
Знаний подчерпнуть тоже не могу.
Меняю пароль и адрес электронной почты, чтобы больше никого не доставать.
Всем удачи.
|
|
31.01.2010, 10:08
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от Niar
|
Пример можно?
Я видел но ошибка то всё равно есть
|
var obj = new String('');
false===obj ? alert('false') : alert('true'); // true
str = '';
false===str ? alert('false') : alert('true'); // true
По поводу ошибка не ошибка. 2 это цифра и тип у неё number, n==2 правильно.
|
|
|
|