Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2014, 00:07
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

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

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

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

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

Последний раз редактировалось cyber, 30.04.2014 в 00:12.
Ответить с цитированием
  #2 (permalink)  
Старый 30.04.2014, 00:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

alert(variable === undefined)

alert(typeof variable == "undefined")
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 30.04.2014, 09:11
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Aetae
alert(variable === undefined)
На локальных лучше сразу выловить исключение и обнаружить свои косяки, чем в случае с typeof рисковать насрать в глобал.
А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет.

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

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #4 (permalink)  
Старый 30.04.2014, 09:28
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

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

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

isUndef(value)
__________________
kobezzza
code monkey
Ответить с цитированием
  #5 (permalink)  
Старый 30.04.2014, 09:36
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

https://developer.mozilla.org/en-US/...ects/undefined
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #6 (permalink)  
Старый 30.04.2014, 10:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от 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 работать не будет
}

Последний раз редактировалось Octane, 30.04.2014 в 10:34.
Ответить с цитированием
  #7 (permalink)  
Старый 30.04.2014, 10:39
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

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

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

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

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #8 (permalink)  
Старый 30.04.2014, 10:47
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

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

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


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

ЗЫ:

Цитата:
alert(variable === undefined)
Цитата:
А глобальные, если они не прописаны в коде явно, никто так в здравом уме не проверяет.
Перечитав понял, что изначально тебя не понял
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 30.04.2014 в 11:04.
Ответить с цитированием
  #9 (permalink)  
Старый 30.04.2014, 11:09
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

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

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 30.04.2014 в 11:16.
Ответить с цитированием
  #10 (permalink)  
Старый 30.04.2014, 11:26
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

var evalSupport = false;

try {
    evalSupport = eval('true');

} catch (ignore) {}


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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните, почему так происходит ak-o jQuery 12 12.07.2013 12:32
Извините что создаю еще одну тему, но мне нужна помощь и ваше мнение megaupload Оффтопик 11 27.05.2013 12:58
Посоветуйте новику, что я делаю не так danil-n2 Общие вопросы Javascript 5 26.04.2013 21:22
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46