Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   почему пишу так? (https://javascript.ru/forum/offtopic/46926-pochemu-pishu-tak.html)

cyber 30.04.2014 00:07

почему пишут так?
 
часть копаясь в чужом коде вижу
typeof variable == "undefined"

почему не так ?
variable === undefined

просто разный стиль кода, или я чего то не понимаю?

П.с просто вижу такую проверку наверное в 90% случаев...

Aetae 30.04.2014 00:22

alert(variable === undefined)

alert(typeof variable == "undefined")

Дзен-трансгуманист 30.04.2014 09:11

Цитата:

Сообщение от Aetae
alert(variable === undefined)

На локальных лучше сразу выловить исключение и обнаружить свои косяки, чем в случае с typeof рисковать насрать в глобал.
А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет.

Остальное - вопросы стиля и предпочтений, имхо.

kobezzza 30.04.2014 09:28

Цитата:

На локальных лучше сразу выловить исключение и обнаружить свои косяки, чем в случае с typeof рисковать насрать в глобал.
Юзай 'use strict' - там попытка создать переменную без указания ключевого слова приведёт к ошибке :)

Цитата:

А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет.
Я проверяю иногда :) Бывают случаи, когда нужно понять в каком окружении запущен скрипт: браузер, поток браузера, нода, аддон к фотошопу и т.д.

Цитата:

Остальное - вопросы стиля и предпочтений, имхо.
Согласен, я вообще делаю так:

isUndef(value)

Gozar 30.04.2014 09:36

https://developer.mozilla.org/en-US/...ects/undefined

Octane 30.04.2014 10:27

Цитата:

Сообщение от Gozar
https://developer.mozilla.org/en-US/...ects/undefined

Кстати интересный момент про пример оттуда:
Цитата:

Сообщение от MDN
var x;
if (x === undefined) {
   // these statements execute
}
else {
   // these statements do not execute
}

Если вдруг кто не знает: var x; не изменит значение x на undefined, если переменная x ранее определена.

Делая так в глобале, можно выстрелить себе в ногу, если не различать глобальные переменные и свойства/методы инстанса Window.
var FormData;
if (!FormData) {
    //все нормально, реализуем свой FormData
}

var postMessage;
if (!postMessage) {
    //в Chrome и IE мы только что убили глобальную ссылку на postMessage,
    //причем даже window.postMessage работать не будет
}

Дзен-трансгуманист 30.04.2014 10:39

Цитата:

Сообщение от kobezzza
Юзай 'use strict'

Это хорошая практика, но не все ее соблюдают. Даже я не всегда.)
Да вообще, бывает, вытаскиваешь из скрипта со стирктом сниппет и вставляешь туда, где стрикт не включен, или наоборот. Поэтому хочется ожидать, что поведение будет strict-независимым.

Цитата:

Сообщение от kobezzza
Я проверяю иногда Бывают случаи, когда нужно понять в каком окружении запущен скрипт

Не понял, ты пишешь window === undefined, что ли? Не верю. :)

Цитата:

Сообщение от kobezzza
isUndef(value)

А я так проверяю:
value === void 0
Потому что, на мой взгляд, это промах в дизайне языка, что у undefined нет своего литерала. Поэтому лично я undefined стараюсь избегать везде, где только можно.

kobezzza 30.04.2014 10:47

Цитата:

Не понял, ты пишешь window === undefined, что ли? Не верю.
Не:)

Могу написать:

typeof window === 'undefined'
typeof importScripts === 'undefined'


И т.д., но такое приходится делать редко :)

ЗЫ:

Цитата:

alert(variable === undefined)
Цитата:

А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет.
Перечитав понял, что изначально тебя не понял :D

Дзен-трансгуманист 30.04.2014 11:09

kobezzza,
Напиши, плиз, все проверки окружения, которые ты используешь. Ну, то есть, поделись опытом. :)

kobezzza 30.04.2014 11:26

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 309875)
kobezzza,
Напиши, плиз, все проверки окружения, которые ты используешь.

Ну собственно самые главные я уже написал:) Можно также проверить работоспособность eval, т.к. некоторые окружения (например аддон к браузеру) могут блокировать это.

var evalSupport = false;

try {
    evalSupport = eval('true');

} catch (ignore) {}


При написании плагинов к разному софту проверки уже очень специфичны.


Часовой пояс GMT +3, время: 22:44.