Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   JavaScript: The Good Parts (https://javascript.ru/forum/study/18455-javascript-good-parts.html)

mycoding 01.07.2011 12:29

JavaScript: The Good Parts
 
Хочу поговорить о
видео курсе Douglas Crockford JavaScript Master Class
http://oreilly.com/catalog/9780596809614
и книге
javascript: The Good Parts
http://oreilly.com/catalog/9780596517748

В принципе это одно и тоже.

У меня возникли вопросы по ходу просмотра видео.
Сомнения в том, а стоит ли применять то, что там советуется.

Мне хочется узнать Ваше мнение.

Те советы, которые вызвали сомнение:
1 - Чтобы сделать из строки число делать так
+x.
Когда я был на Мастер Классах Ильи Кантора, он тоже про это говорил.
Также этот метод есть во Флэнагане.
Я уже и сам не помню когда делал из строки число.
Просто мне это не надо.

Но такой способ напоминает хак метод, а все хак методы - это плохо.
Лучше их избегать.

2 -
Советуется вместо вот этого
for(var i=0;i<1000000000;i++){}
Делать вот так
for(var i=0;i<1000000000;i+=1){}
Или даже вот так(не помню было это или нет, но вроде было)
var i;
for(i=0;i<1000000000;i++){}

Вроде бы утверждалось, что так быстрее.
Проверил на производительность в браузерах.
var t1 = new Date().getTime();
var a=0;
for(var i=0;i<1000000;i+=1){
	a+=i;
}
var t2 = new Date().getTime();
console.log(t2-t1);

Производительность также.
Даже проверил на NodeJS в 10 миллиардов итераций
производительность одинаковая
var t1 = new Date().getTime();
var a=0;
for(var i=0;i<10000000000;i+=1){
	a+=i;
}
var t2 = new Date().getTime();
console.log(t2-t1);


3 - Советуется не использовать ==, а использовать ===.
Илья Кантор тоже про это говорил.
И в книге Фленагана это тоже есть.
Меня лично == никогда не подводил.
Я понимаю в чем разница между == и === и меня == вполне устраивает.

Также приводился пример
Что
0.1+0.2 === 0.3 false
0.1+0.2 == 0.3 false

И у Ильи это было и во Фленагане тоже есть.
С этим спора нет.

Вот наверное и всё, что запомнилось необычного и с чем в той или иной форме не согласен.

Теперь Ваше мнение.

Aetae 01.07.2011 13:14

1. +n - способ изначально предусмотренный языком.
2. Глупости.)
3. На счет === это вы зря, вещь весьма нужная.
Самый частый случай:
alert(0=='')
alert(0==='')

Gozar 01.07.2011 17:04

1. c +n могут быть фокусы:
-n или даже n*1.

alert('2'+'1');        //21 опа
alert('2'+'1'*1);     //21 опа
alert('2'*1+'1'*1);  //3
alert('2'-'1');     //1

Kolyaj 01.07.2011 17:22

Цитата:

Сообщение от Gozar
1. c +n могут быть фокусы:

Унарный и бинарный плюс -- разные операторы.

Gozar 01.07.2011 17:53

Цитата:

Сообщение от Kolyaj (Сообщение 111387)
Унарный и бинарный плюс -- разные операторы.

а что?
alert((+'2')+(+'1'));        //3

но для меня такой код менее очевиден, чем *1. Или здесь что-то кроется?

B@rmaley.e><e 01.07.2011 18:06

2. Вообще говоря, ++i и i+=1 быстрее, чем i++, но современные JS движки умеют выполнять целую массу всевозможных оптимизаций, так что можно не париться.

Kolyaj 01.07.2011 18:36

Цитата:

Сообщение от Gozar
а что?

Что а что? mycoding пишет про унарный плюс, а вы приводите примеры по бинарный.

monolithed 01.07.2011 18:42

Цитата:

Сообщение от mycoding
for(var i=0;i<1000000000;i+=1){}

вариантов этого цикла множество.
for(var i = 0, j = 10; i < j; ++i);
for(var i = 10; i--;);

var i = 10;
while(i--);

var i = 10;
while(i-- > 0); //этот кстати самый быстрый

var i = -1;
while(++i < 10);

Цитата:

Сообщение от mycoding
+x.
Но такой способ напоминает хак метод, а все хак методы - это плохо.
Лучше их избегать.

т.е. корректней приводить значение с помощью Number(), parseInt() ...?.
Цитата:

Сообщение от mycoding
3 - Советуется не использовать ==, а использовать ===.

там где это важно - да.
alert([undefined == null, undefined === null]);

Цитата:

Сообщение от mycoding
0.1+0.2 === 0.3 false
0.1+0.2 == 0.3 false

ну так

Gozar 01.07.2011 19:21

Цитата:

Сообщение от Kolyaj (Сообщение 111402)
Что а что? mycoding пишет про унарный плюс, а вы приводите примеры по бинарный.

alert(+'2'++'1')

такой пример больше подойдет?

Kolyaj 01.07.2011 20:25

Цитата:

Сообщение от Gozar
такой пример больше подойдет?

Нет. Теперь тут инкремент :)


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