Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
как структура данных куки сложнее
при включённом джаваскрипте браузер может отказаться принимать куки
Assignment to an undeclared identifier or otherwise unresolvable reference does not create a property in the global object. When a simple assignment occurs within strict mode code, its LeftHandSide must not evaluate to an unresolvable Reference. If it does a ReferenceError exception is thrown(документация)
globalName = 'someValue'window.globalName = 'someValue' несколько длиннее, зато с первого взгляда ясно, что переменная глобальная.if( var some = blabla() ){ ... }var some = someFn();
if( some )
{
...
some.blabla
}
console.log( something == null )
// ReferenceError: something is not defined
typeof чтоНибудь == 'undefined' // традиционный способ
_.isUndefined(window.чтоНибудь) // едва ли короче и проще!
window.чтоНибудь == null; // имхо, лучше
console.log( undefined == null); // true
console.log( '' == 0 ); // true
console.log( null == 0 ); // false
console.log( undefined == 0 ); // false
console.log( null == '' ); // false
console.log( undefined == '' ); // falseВо всех браузерах ровно такое же поведение, которое соответствует стандарту.Можете ли Вы указать соответствующее место стандарта
…
- If Type(V) is not Reference, return V.
- Let base be the result of calling GetBase(V).
- If IsUnresolvableReference(V), throw a ReferenceError exception.
IsUnresolvableReference(V). Returns true if the base value is undefined and false otherwise.
правильная проверкаглобальныхпеременных
window.__config = {};
...
if( __config.use_super_duper_plugin ){ ... }
if( use_super_duper_plugin ) { ... }
Проверок вроде if( window.bla_bla_bla ) мне делать почти не приходится, а уж проверять if( typeof window.blabla !== 'undefined' ) мне не приходилось ни разу вовсе (зачем создавать такие странные ситуации? уж не хаоса ли в коде это признак?).
myVar и window.myVar никогда не были синонимами. Как минимум потому, что первое — обращение к переменной, которое может сломаться, если переменная неопределена, а второе — обращение к свойству объекта, которое мирно выдаст undefined и поедет дальше. Разные подходы, разные результаты.!function($){
$.fn.myPlugin = something;
}(window.jQuery || window.zepto || window.ender);
Обработка неопределённых глобальных переменных располагается далёко от здравого смысла! Но её можно превозмочь…