Не jQuery. Не YUI. Не (и т. Д. И т. П.)
Фреймворки могут быть полезны, но они часто скрывают иногда уродливые детали того, как на самом деле работают JavaScript и DOM от вас. Если ваша цель состоит в том, чтобы сказать «Я знаю JavaScript», то мы тратим на это много времени.
Вот некоторые особенности языка JavaScript, которые вы должны знать, чтобы понять, что он делает, и не быть пойманным, но которые не сразу очевидны для многих людей:
Это object.prop
и object['prop']
- это одно и то же (поэтому не могли бы вы прекратить использовать eval
, спасибо); свойства объекта всегда являются строками (даже для массивов); Что for
... in
для (и , что это не ).
Свойство обнюхивать; что такое undefined
(и почему оно пахнет ); почему, казалось бы, малоизвестный оператор in
полезен и отличается от проверок typeof
/ undefined
; hasOwnProperty
; цель delete
.
Что тип данных Number
действительно является плавающим; не зависящие от языка трудности использования поплавков; избегая восьмеричной ловушки parseInt
.
Определение вложенных функций; необходимость использования var
в объеме, который вы хотите избежать случайных глобалов; как можно использовать прицелы для укупорки; проблема замкнутого контура .
Как глобальные переменные и свойства window
сталкиваются; как глобальные переменные и элементы документа не должны сталкиваться, а в IE; необходимость использования var
в глобальном масштабе, чтобы избежать этого.
Как оператор function
действует, чтобы поднять ’определение перед кодом, предшествующим ему; разница между операторами и функциональными выражениями; почему выражения именованных функций не должны использоваться .
Как действительно работают функции конструктора, свойство prototype
и оператор new
; методы использования этого для создания нормальной системы класса / подкласса / экземпляра, которую вы действительно хотели; когда вы можете захотеть использовать объекты на основе замыкания вместо прототипирования. (Большинство учебного материала по JS абсолютно ужасны по этому поводу; мне потребовались годы, чтобы понять это прямо в моей голове.)
Как this
определяется во время вызова, а не связывается; следовательно, передача методов не работает так, как вы ожидаете от других языков; как можно использовать замыкания или Function#bind
, чтобы обойти это.
Другие функции пятого издания ECMAScript, такие как indexOf
, forEach
и методы функционального программирования в Array
; как исправить старые браузеры, чтобы их можно было использовать; используя их со встроенными выражениями анонимных функций, чтобы получить компактный читаемый код.
Поток управления между браузером и кодом пользователя; синхронное и асинхронное выполнение; события, которые возникают внутри потока управления (например, фокус), против событий и тайм-аутов, которые происходят, когда управление возвращается; как вызов якобы синхронного встроенного типа alert
может привести к потенциально катастрофическому повторному входу.
Как кросс-оконные скрипты влияют instanceof
; как межоконный сценарий влияет на поток управления различными документами; как postMessage
, надеюсь, исправит это.
См. этот ответ относительно двух последних пунктов.
Прежде всего, вам следует критически относиться к JavaScript, признавая, что по историческим причинам он является несовершенным языком (даже больше, чем большинство языков), и избегая его наихудших проблем. Работу Крокфорда в этой области определенно стоит прочитать (хотя я не на 100% согласен с ним в том, что такое «Хорошие детали»).
Отредактировано в соответствии с комментарием
Какую версию artifactory вы используете? Согласно этой проблеме , в версии 1.3 это делается с использованием HTTP PUT, тогда как в 2.0 он принимает каталог из прокси-репозиториев.
Я бы посоветовал вам открыть билет для артефакта по адресу http://issues.jfrog.org/jira/browse/RTFACT - в конце концов, это проект с открытым исходным кодом ...