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

Niar 24.01.2010 15:35

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

Кстати я пообещал себе купить бумажный вариант книги как только сделаю первый сайт на заказ:D

x-yuri 29.01.2010 10:04

Цитата:

Сообщение от Niar
Или вот еще
break: имя_метки;

у меня такого нету, это может быть ошибка какого-нибудь FineReader'а или чем оно там сделано

Цитата:

Сообщение от Niar
Прежде всего следует заметить, что попытка преобразования непустых объектов в логическое значение дает в результате значение true. Это справедливо для любых объектов (включая массивы и функции), даже для объектов оберток, которые представляют элементарные типы, при другом способе преобразования дающие значение false.

и что тут глупого?

Цитата:

Сообщение от Niar
Или например почему он постоянно говорить объекты и массивы. Как будто массивы это не объекты. Нужно говорить в том числе массивы.

ну тогда давай цитату

Gozar 29.01.2010 20:17

Цитата:

Сообщение от Niar (Сообщение 41796)
Вот пример работы switch из книги. Однако!
Блоки кода выполняются не если n==1(2,3 нужное подчеркнуть) а если n===1(2,3);

на следующей странице через 2 абзаца поясняется что, цитирую дословно: Факт совпадения определяется в соответствии с оператором идентичности ===, а не оператором равенства==, поэтому выражения должны совпадать без какого-либо преобразования типов.

Цитата:

Сообщение от Niar (Сообщение 41796)
Почитал соседние топики. Абсолютно глупая фраза. Толи это ошибка перевода и он имел ввиду что-то другое то ли я ни чего не понимаю

Здесь все нормально, нужно просто понимать о чем речь, это так сказать "фича" js. например в конструкции if сравниваешь объект строку, думаешь щаз она вернет false и условие не выполнится, а она бламс и true и вперед долгие часы дебага :)

Цитата:

Сообщение от Niar (Сообщение 41796)
Или например почему он постоянно говорить объекты и массивы. Как будто массивы это не объекты. Нужно говорить в том числе массивы.

Здесь делается акцент на различия в конструкциях, под объектом подразумевается конструкция вида
{ key: value }
, а под массивом
[val1,val2,val3] или var[int index] = val

А так, как в js объектами являются еще и Date, RegExp, Function, то автор пытается не запутать читателя, который возможно пришел из языка в котором объекты это объекты а массивы это массивы, а ассоциативные массивы это ассоциативные массивы, а не объекты.

micscr 30.01.2010 09:38

Цитата:

Сообщение от Niar (Сообщение 42508)
Кстати я пообещал себе купить бумажный вариант книги как только сделаю первый сайт на заказ:D

Вот на этом форуме конкурс намечается. Если знаешь PHP можешь участвовать. Приз там обычно - любая книга.

mycoding 30.01.2010 15:06

Наверное ты уже разобрался, но все же напишу, не надо делать ===
просто можно в кавычки значения поставить.
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

mycoding,
Что-то я не понял вашу мысль.
var n = 1;
switch(n) {
  case '1': alert(1); break;
  case '2': alert(2); break;
  default: alert("def");
}

И что же выдаст скрипт?
А вы говорите "Выполняется, если n == 1"

Niar 31.01.2010 07:58

Цитата:

Здесь все нормально, нужно просто понимать о чем речь, это так сказать "фича" js. например в конструкции if сравниваешь объект строку, думаешь щаз она вернет false и условие не выполнится, а она бламс и true и вперед долгие часы дебага
Пример можно?
Цитата:

на следующей странице через 2 абзаца поясняется что, цитирую дословно: Факт совпадения определяется в соответствии с оператором идентичности ===, а не оператором равенства==, поэтому выражения должны совпадать без какого-либо преобразования типов.
Я видел но ошибка то всё равно есть

mycoding 31.01.2010 09:25

Цитата:

Сообщение от Мараторий (Сообщение 42900)
mycoding,
Что-то я не понял вашу мысль.
var n = 1;
switch(n) {
  case '1': alert(1); break;
  case '2': alert(2); break;
  default: alert("def");
}

И что же выдаст скрипт?
А вы говорите "Выполняется, если n == 1"

Да я ошибся извините )))

Gozar 31.01.2010 10:08

Цитата:

Сообщение от Niar (Сообщение 42904)
Пример можно?

Я видел но ошибка то всё равно есть

var obj = new String('');
	false===obj ? alert('false') : alert('true'); // true

	str = '';
	false===str ? alert('false') : alert('true'); // true


По поводу ошибка не ошибка. 2 это цифра и тип у неё number, n==2 правильно.


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