Я предпочитаю typeof(elem) != 'undefined' && elem != null
.
Однако вы выбираете, подумайте о том, чтобы поместить проверку в функцию следующим образом:
function existy (x) {
return typeof (x) != 'undefined' && x != null;
}
Если вы не знаете, что переменная объявлена, то продолжайте работу с typeof (x) != 'undefined' && x != null;
Если вы знаете, что переменная объявлена, но может не существовать, вы можете использовать
existy(elem) && doSomething(elem);
Переменная, которую вы проверяете, иногда может быть вложенным свойством. Вы можете использовать prop || {}, чтобы спуститься по строке, проверяющей наличие соответствующего свойства:
var exists = ((((existy(myObj).prop1||{}).prop2||{}).prop3||{})[1]||{}).prop4;
После каждого использования свойства (... '|| {}'). nextProp, так что отсутствующее свойство не будет выдать ошибку.
Или вы могли бы использовать такие же, как existy(o) && existy(o.p) && existy(o.p.q) && doSomething(o.p.q)
На Mac существует определенное расширение для выполнения сценариев оболочки путем двойного щелчка по ним: это .command
.
Для JAVA-приложений на Mac действительно необходимо использовать Банку Apple Bundler (в папке Developer Tools/Applications/Utilities; действительно символьная ссылка на/usr/share/java/Tools/Jar Bundler). Это позволяет Вам сделать надлежащий OS X двойным активируемым по щелчку приложением, включая установку предпочтений, например, использование панели инструментов Mac, версии JVM, графической системы, метаданных приложений OS X и пути к классу/ресурсов.
Можно использовать .sh (Сценарий оболочки), после того, как всем MacOSX будет Unix!
Мердад уже объяснил, что он также соответствует одной пустой подстроке в конце строки. Я нашел официальное объяснение этого поведения (зачем сопоставить одну пустую подстроку вместо бесконечного числа) в документации по .net:
http://msdn.microsoft.com/en-us/library /c878ftxe.aspx
Quantifiers *, +, {n, m} (и их «ленивые» аналоги) никогда не повторяются после пустого совпадения, когда было найдено минимальное число n. Это правило не позволяет кванторам входить в бесконечные циклы при пустых совпадениях, когда m бесконечно (хотя правило применяется, даже если m не бесконечно).
Например, (a?) * Соответствует строке «aaa» и захватывает подстроки в узор (а) (а) (а) (). Обратите внимание, что пятого пустого захвата нет,