Pull to refresh

Comments 20

UFO just landed and posted this here
Думаю, формат книги и формат конспекта — разные форматы. На чтение книги нужен не один вечер, и задача её — научить, дать полное и глубокое представление о предмете. Здесь я ставил другую цель — помочь быстро освежить знания об особенностях языка, если вдруг давно не имел с ним дела. Показать, что нужно гуглить, если какой-то пример непонятен. Просмотреть статью можно за минут 8-10, я думаю. С книгой так не получится.
UFO just landed and posted this here
Да, это субъективный взгляд на самое главное. Думаете, субъективным точкам зрения на Хабре не место?
UFO just landed and posted this here
Стоит отметить, что статья довольно качественная.
Я люблю такие статьи, они, как правило, рассчитаны на новичков. В них всегда чувствуется боль человека, который проходит обучение языку без наставника, самостоятельно. Поэтому я традиционно рекомендую в комментариях:
habrahabr.ru/post/120192/
и
habrahabr.ru/post/124327/
>Диаграмма типов JavaScript выглядит примерно так:

Диаграмма типов JavaScript выглядит примерно как логотип хабра.
причём тот, который помнят только олдфаги, а не эта стилизованная буквочка.
Хорошая статья, спасибо! Она не конкурирует, безусловно, с книгами, не пытается заменить Крокфорда. Но ее несомненная и весомая польза в том, что она уменьшает общую энтропию вокруг предмета изучения.
UFO just landed and posted this here
Кто-нибудь видел в реальной жизни, числа в строках, начинающиеся с нуля? Да ещё тогда, когда надо применять именно parseInt, а не Number? Благо с внедрением ES5 про эти никому не нужные восьмеричные числа можно забыть.

С восьмеричными числами столкнулся, когда пришлось разбирать дату и время в нестандартном формате. Получилось, что баг воспроизводится только в определённое время (8 или 9 секунд, минут, часов) и не во всех браузерах. Поэтому посчитал не лишним предупредить. Я тоже надеюсь, что скоро наступит время, когда это предупреждение будет ни к чему.

Если это никак не проверить, то откуда информация про передачу строк по ссылке? Да и зачем это здесь, если никаких практических следствий это не несёт?

Хм… Из практических последствий — длинные строки передаются в функцию так же быстро, как короткие. Хотя, сказать по правде, так себе оправдание. Это скорее информация о том, что разработчики браузеров сами позаботились об оптимизации работы со строками, от разработчика ничего не требуется в большинстве случаев. Может быть, и не стоило об этом писать.

Проверять всё же надо на реальных данных, а не на искусственных циклах, которые умный компилятор может и развернуть. И что мы тестируем: компилятор или тип записи уже непонятно.

Согласен. Можно воспринимать как информацию о том, что сделать вывод о том, что быстрее, достаточно сложно, быстродействие зависит и от типа записи, и от интерпретатора и много от чего ещё.

Не понял, что это значит. Может быть разных случая, когда будет undefined.

Спасибо за пример со свойствами. У меня представление об разнице этой тоже скорее интуитивное, чем формальное. Но, по крайней мере, есть закономерность: undefined — для отсутствующих свойств и неинициализированных переменных, null — для конца цепочки прототипов и присвоенных объектов, у которых отсутствует значение. typeof null === 'object', typeof undefined === 'undefined'.
UFO just landed and posted this here
быть жадным (должно иметь модификатор g)


В данном случае g обозначает global, а не greedy. Но само понятие «жадные» присутствует в регулярных выражениях. Видимо, вы перепутали.
Статья неплохая, много полезного для новичков и даже для уже повидавших js. Но есть несколько косяков.

Строки в качестве аргументов функции передаются по ссылке, а не по значению.

Не верно, все примитивы в js передаются по значению. В статье несколько раз упоминается неверная информация и это плохо…

self executed function

Общепринятое название immediately invoked function expression (IIFE). Раз уж решили писать для новичков, то чтобы они потом не путались в терминологии лучше так.

А ещё недавно появился метод bind, который привязывает функцию к контексту.

Он не просто привязывает функцию к контексту, он создаёт новую функцию с указанным контекстом, в отличие от call и apply.
Спасибо, уточнил спорные моменты.

Не совсем согласен с передачей строк по значению, дело в том, что случае со строками нет никакого способа это проверить, потому что строки неизменяемы. Разве что косвенно — сравнить скорость передачи длинных и коротких строк в функцию и предположить, что передача по значению будет медленнее за счет копирования длинной строки. Получается, нет никаких причин передавать строки по значению, и разработчики JavaScript движков, насколько я знаю, как смогли оптимизировали этот момент. Так что с точки зрения результата выполнения кода правильно будет сказать, что строки неизменяемы, и как передаются — проверить невозможно. А с точки зрения скорости работы — что строки всё-таки передаются по ссылке. По крайней мере, много где об этом пишут, например тут. А сравниваются строки по значению, это конечно.
Не совсем согласен с передачей строк по значению, дело в том, что случае со строками нет никакого способа это проверить, потому что строки неизменяемы.

JS не какой-то странный зверь, которого надо поймать и наблюдать за ним, чтобы понять как он ведёт себя. Это такой же инструмент как и C#, для которого есть документация. Поэтому не нужно ничего «предполагать/проверять/искать причины поведения».
Например, есть отличная статья по стандарту ECMA, в которой объясняется подробно о том как работает всё это в JS (в заключении есть прямая фраза, что примитивы (к которым строки относятся) передаются по значению).
Sign up to leave a comment.

Articles