почему пишут так?
часть копаясь в чужом коде вижу
typeof variable == "undefined" почему не так ? variable === undefined просто разный стиль кода, или я чего то не понимаю? П.с просто вижу такую проверку наверное в 90% случаев... |
alert(variable === undefined) alert(typeof variable == "undefined") |
Цитата:
А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет. Остальное - вопросы стиля и предпочтений, имхо. |
Цитата:
Цитата:
Цитата:
isUndef(value) |
|
Цитата:
Цитата:
var x; не изменит значение x на undefined , если переменная x ранее определена.Делая так в глобале, можно выстрелить себе в ногу, если не различать глобальные переменные и свойства/методы инстанса Window. var FormData; if (!FormData) { //все нормально, реализуем свой FormData } var postMessage; if (!postMessage) { //в Chrome и IE мы только что убили глобальную ссылку на postMessage, //причем даже window.postMessage работать не будет } |
Цитата:
Да вообще, бывает, вытаскиваешь из скрипта со стирктом сниппет и вставляешь туда, где стрикт не включен, или наоборот. Поэтому хочется ожидать, что поведение будет strict-независимым. Цитата:
Цитата:
value === void 0Потому что, на мой взгляд, это промах в дизайне языка, что у undefined нет своего литерала. Поэтому лично я undefined стараюсь избегать везде, где только можно. |
Цитата:
Могу написать: typeof window === 'undefined' typeof importScripts === 'undefined' И т.д., но такое приходится делать редко :) ЗЫ: Цитата:
Цитата:
|
kobezzza,
Напиши, плиз, все проверки окружения, которые ты используешь. Ну, то есть, поделись опытом. :) |
Цитата:
var evalSupport = false; try { evalSupport = eval('true'); } catch (ignore) {} При написании плагинов к разному софту проверки уже очень специфичны. |
kobezzza,
Ну в частности меня интересует окно браузера/воркер/нода function foo ( func ) { ??? } foo( function ( global, envType ) { // global -> global object // envType -> 'window' / 'worker' / 'node' }); Как сделать это максимально корректно? |
Ну, обычно хватает:
(function (global) { })(this); В окне и потоке this - это будет ссылка на глобальный объект. В окружении ноды this - это ссылка на exports, а доступ к глобальному объекту доступен через ссылку global, но при написании модулей как правило нужен именно exports. В node-webkit насколько мне известно вcё также, как и в окне браузера. Варианты для логического определения: var isWorker = typeof window === 'undefined' && typeof importScripts !== 'undefined'; var isNode = typeof window === 'undefined' && typeof global !== 'undefined'; Это не 100% гарантия, ибо в той же ноде можно сделать: global.window = {}; И всё сломается, но тот, кто так делает - сам виноват :) |
Цитата:
<script> или как модуль Nodejs<script> typeof require → "function" typeof setImmediate → "undefined" typeof global.setImmediate → "function" typeof postMessage → "function" Модуль typeof require → "function" typeof setImmediate → "function" typeof global.setImmediate → "function" typeof postMessage → "undefined" |
Цитата:
Насчет глобального объекта нашел такое Function('return this')()А потом подумал: как я сам до этого не допер? :) Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
проверка на существование
if(value == null){ } нубы....... А реверенс исключения не надо избегать тайпофом, это плохой стиль. |
Часовой пояс GMT +3, время: 14:23. |