Комментарии 20
НЛО прилетело и опубликовало эту надпись здесь
Думаю, формат книги и формат конспекта — разные форматы. На чтение книги нужен не один вечер, и задача её — научить, дать полное и глубокое представление о предмете. Здесь я ставил другую цель — помочь быстро освежить знания об особенностях языка, если вдруг давно не имел с ним дела. Показать, что нужно гуглить, если какой-то пример непонятен. Просмотреть статью можно за минут 8-10, я думаю. С книгой так не получится.
+12
Стоит отметить, что статья довольно качественная.
+7
Не в ту ветку.
0
Я люблю такие статьи, они, как правило, рассчитаны на новичков. В них всегда чувствуется боль человека, который проходит обучение языку без наставника, самостоятельно. Поэтому я традиционно рекомендую в комментариях:
habrahabr.ru/post/120192/
и
habrahabr.ru/post/124327/
habrahabr.ru/post/120192/
и
habrahabr.ru/post/124327/
+4
>Диаграмма типов JavaScript выглядит примерно так:
Диаграмма типов JavaScript выглядит примерно как логотип хабра.
Диаграмма типов JavaScript выглядит примерно как логотип хабра.
+9
Спасибо за статью! )
+3
Хорошая статья, спасибо! Она не конкурирует, безусловно, с книгами, не пытается заменить Крокфорда. Но ее несомненная и весомая польза в том, что она уменьшает общую энтропию вокруг предмета изучения.
+3
НЛО прилетело и опубликовало эту надпись здесь
Кто-нибудь видел в реальной жизни, числа в строках, начинающиеся с нуля? Да ещё тогда, когда надо применять именно parseInt, а не Number? Благо с внедрением ES5 про эти никому не нужные восьмеричные числа можно забыть.
С восьмеричными числами столкнулся, когда пришлось разбирать дату и время в нестандартном формате. Получилось, что баг воспроизводится только в определённое время (8 или 9 секунд, минут, часов) и не во всех браузерах. Поэтому посчитал не лишним предупредить. Я тоже надеюсь, что скоро наступит время, когда это предупреждение будет ни к чему.
Если это никак не проверить, то откуда информация про передачу строк по ссылке? Да и зачем это здесь, если никаких практических следствий это не несёт?
Хм… Из практических последствий — длинные строки передаются в функцию так же быстро, как короткие. Хотя, сказать по правде, так себе оправдание. Это скорее информация о том, что разработчики браузеров сами позаботились об оптимизации работы со строками, от разработчика ничего не требуется в большинстве случаев. Может быть, и не стоило об этом писать.
Проверять всё же надо на реальных данных, а не на искусственных циклах, которые умный компилятор может и развернуть. И что мы тестируем: компилятор или тип записи уже непонятно.
Согласен. Можно воспринимать как информацию о том, что сделать вывод о том, что быстрее, достаточно сложно, быстродействие зависит и от типа записи, и от интерпретатора и много от чего ещё.
Не понял, что это значит. Может быть разных случая, когда будет undefined.
Спасибо за пример со свойствами. У меня представление об разнице этой тоже скорее интуитивное, чем формальное. Но, по крайней мере, есть закономерность: undefined — для отсутствующих свойств и неинициализированных переменных, null — для конца цепочки прототипов и присвоенных объектов, у которых отсутствует значение. typeof null === 'object', typeof undefined === 'undefined'.
0
быть жадным (должно иметь модификатор g)
В данном случае g обозначает global, а не greedy. Но само понятие «жадные» присутствует в регулярных выражениях. Видимо, вы перепутали.
+2
Статья неплохая, много полезного для новичков и даже для уже повидавших js. Но есть несколько косяков.
Не верно, все примитивы в js передаются по значению. В статье несколько раз упоминается неверная информация и это плохо…
Общепринятое название immediately invoked function expression (IIFE). Раз уж решили писать для новичков, то чтобы они потом не путались в терминологии лучше так.
Он не просто привязывает функцию к контексту, он создаёт новую функцию с указанным контекстом, в отличие от call и apply.
Строки в качестве аргументов функции передаются по ссылке, а не по значению.
Не верно, все примитивы в js передаются по значению. В статье несколько раз упоминается неверная информация и это плохо…
self executed function
Общепринятое название immediately invoked function expression (IIFE). Раз уж решили писать для новичков, то чтобы они потом не путались в терминологии лучше так.
А ещё недавно появился метод bind, который привязывает функцию к контексту.
Он не просто привязывает функцию к контексту, он создаёт новую функцию с указанным контекстом, в отличие от call и apply.
0
Спасибо, уточнил спорные моменты.
Не совсем согласен с передачей строк по значению, дело в том, что случае со строками нет никакого способа это проверить, потому что строки неизменяемы. Разве что косвенно — сравнить скорость передачи длинных и коротких строк в функцию и предположить, что передача по значению будет медленнее за счет копирования длинной строки. Получается, нет никаких причин передавать строки по значению, и разработчики JavaScript движков, насколько я знаю, как смогли оптимизировали этот момент. Так что с точки зрения результата выполнения кода правильно будет сказать, что строки неизменяемы, и как передаются — проверить невозможно. А с точки зрения скорости работы — что строки всё-таки передаются по ссылке. По крайней мере, много где об этом пишут, например тут. А сравниваются строки по значению, это конечно.
Не совсем согласен с передачей строк по значению, дело в том, что случае со строками нет никакого способа это проверить, потому что строки неизменяемы. Разве что косвенно — сравнить скорость передачи длинных и коротких строк в функцию и предположить, что передача по значению будет медленнее за счет копирования длинной строки. Получается, нет никаких причин передавать строки по значению, и разработчики JavaScript движков, насколько я знаю, как смогли оптимизировали этот момент. Так что с точки зрения результата выполнения кода правильно будет сказать, что строки неизменяемы, и как передаются — проверить невозможно. А с точки зрения скорости работы — что строки всё-таки передаются по ссылке. По крайней мере, много где об этом пишут, например тут. А сравниваются строки по значению, это конечно.
+1
Не совсем согласен с передачей строк по значению, дело в том, что случае со строками нет никакого способа это проверить, потому что строки неизменяемы.
JS не какой-то странный зверь, которого надо поймать и наблюдать за ним, чтобы понять как он ведёт себя. Это такой же инструмент как и C#, для которого есть документация. Поэтому не нужно ничего «предполагать/проверять/искать причины поведения».
Например, есть отличная статья по стандарту ECMA, в которой объясняется подробно о том как работает всё это в JS (в заключении есть прямая фраза, что примитивы (к которым строки относятся) передаются по значению).
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Краткий конспект по языку JavaScript