Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS. Проверка на существование объекта / 14 сообщений из 14, страница 1 из 1
15.07.2014, 23:30
    #38697275
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
Всем привет.

Пусть есть объект:
Код: javascript
1.
var config = {};



Точнее, пусть его нет. Тогда проверка на его существование будет, например, такой:
Код: javascript
1.
if(window.config === undefined)



А как быть, если мне нужно проверить такой объект:
config.showcase.interval?

Аналогичная проверка уже вызывает ошибку:
Код: javascript
1.
if(window.config.showcase.interval === undefined)



Наверное, это азы, но я что-то не смог быстро найти ответ.
Заранее спасибо!
...
Рейтинг: 0 / 0
15.07.2014, 23:41
    #38697285
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
urukhayВсем привет.

Пусть есть объект:
Код: javascript
1.
var config = {};



Точнее, пусть его нет. Тогда проверка на его существование будет, например, такой:
Код: javascript
1.
if(window.config === undefined)



А как быть, если мне нужно проверить такой объект:
config.showcase.interval?

Аналогичная проверка уже вызывает ошибку:
Код: javascript
1.
if(window.config.showcase.interval === undefined)



Наверное, это азы, но я что-то не смог быстро найти ответ.
Заранее спасибо!

config.showcase.interval - это не объект, а если по простому, то путь из ссылок (ссылка на ссылку на ссылку). А поведение вполне правильное. Если бы я Вам сказал: "Если тебе нужно узнать дома ли Вася - пойди к Пете, он знает где найти Машу, которая знает как связаться с Васей, что бы это узнать", как думаете, что бы Вы могли предпринять, если бы не нашли Петю?! правильно, сказали что я Вам мозги морочу и даже не стали бы уже Машу искать )) Так вот, не морочьте интерпретатору мозги
...
Рейтинг: 0 / 0
16.07.2014, 00:18
    #38697302
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
Member!

Если вопрос морочит Вам голову, то не лезьте в такой топ.
Есть конкретная задача, ее надо решить. Если она не решаема - так и скажите: "Такую проверку сделать нельзя".
Хотя как минимум можно проверить каждый узел в цепочке:

Код: javascript
1.
if(window.config === undefined || window.config.showcase === undefined || window.config.showcase.timer === undefined)



Но я спрашиваю про более короткий вариант: возможно ли.
Спасибо.
...
Рейтинг: 0 / 0
16.07.2014, 09:19
    #38697479
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
urukhay
Код: javascript
1.
if(window.config === undefined || window.config.showcase === undefined || window.config.showcase.timer === undefined)



Но я спрашиваю про более короткий вариант: возможно ли.
Спасибо.
Конечно:
Код: javascript
1.
if(!config || !config.showcase || !config.showcase.timer)


Более короткий вариант? Да
...
Рейтинг: 0 / 0
16.07.2014, 10:41
    #38697581
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
urukhayMember!

Если вопрос морочит Вам голову, то не лезьте в такой топ.
Есть конкретная задача, ее надо решить. Если она не решаема - так и скажите: "Такую проверку сделать нельзя".
Хотя как минимум можно проверить каждый узел в цепочке:

Код: javascript
1.
if(window.config === undefined || window.config.showcase === undefined || window.config.showcase.timer === undefined)



Но я спрашиваю про более короткий вариант: возможно ли.
Спасибо.

Если более короткий по количеству букв - уже написали. Только есть побочный эффект, проверка проводится не строгая.

А по поводу "морочить голову", это был наводящий ответ, который должен был дать понять, что кроме как проверить каждый элемент цепочки по отдельности, решить задачу не возможно.

Как оказалось, Вы это знаете, но зачем-то спрашиваете общую концепцию, вместо того, что бы спросить: "знаю что можно так, но это как-то не круто, как сделать иначе?" :)
...
Рейтинг: 0 / 0
16.07.2014, 11:13
    #38697637
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
За участие и помощь всем спасибо!
А насчет вопроса - какая разница как спрашивать, главное, чтобы суть вопроса была понятна )
Я просто думал, что возможно есть какая-то хитрая функция или способ не проверять все по отдельности.
Начал гуглить - нашел, вот решил спросить.
...
Рейтинг: 0 / 0
16.07.2014, 11:26
    #38697667
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
urukhayЯ просто думал, что возможно есть какая-то хитрая функция...Есть конечно: монады всякие, разбор пути (path)...
urukhayНачал гуглить - нашел, вот решил спросить.Ну вот надо было более конкретно спрашивать: "Что лучше мне использовать из того, что я нашёл в гугле?".
...
Рейтинг: 0 / 0
17.07.2014, 19:23
    #38699634
The_ShadoW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
ПрограмёрТолько есть побочный эффект, проверка проводится не строгая.
Я немного пооффтоплю, потому что наболело.
Так вот, лучше один раз взять доку, и понять правила преобразования типов в ECMAScript, чем всю жизнь насиловать себя и работающих с вашим кодом коллег этими === на 100500 лишних символов.
Лично мои нервы не выдержали, когда я прочитал на одном code review такое:
Код: javascript
1.
if (str !== undefined && str !== null && str.length !== 0)



На мой взгляд, строгие проверки в JS нужны ровно в одном случае: если ты сидишь и пишешь фреймворк. То есть, что-то такое, с чем будут потом работать какие-то непонятные быдлокодеры, так прямо и желающие поломать твой код всеми возможными способами. Вот там оно в какой-то мере может быть оправдано (да и то дешевле и экономнее будет просто тщательно проверять типы входящих данных перед дальнейшей работой с ними).
...
Рейтинг: 0 / 0
18.07.2014, 14:40
    #38700408
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
The_ShadoWПрограмёрТолько есть побочный эффект, проверка проводится не строгая.
Я немного пооффтоплю, потому что наболело.
Так вот, лучше один раз взять доку, и понять правила преобразования типов в ECMAScript, чем всю жизнь насиловать себя и работающих с вашим кодом коллег этими === на 100500 лишних символов.
Лично мои нервы не выдержали, когда я прочитал на одном code review такое:
Код: javascript
1.
if (str !== undefined && str !== null && str.length !== 0)



На мой взгляд, строгие проверки в JS нужны ровно в одном случае: если ты сидишь и пишешь фреймворк. То есть, что-то такое, с чем будут потом работать какие-то непонятные быдлокодеры, так прямо и желающие поломать твой код всеми возможными способами. Вот там оно в какой-то мере может быть оправдано (да и то дешевле и экономнее будет просто тщательно проверять типы входящих данных перед дальнейшей работой с ними).

а как по мне, так приведён вполне нормальный код (возможно в контексте задачи это и криворуко, но с той информацией, что ты дал - нормально). Если ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ).

Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется.
...
Рейтинг: 0 / 0
18.07.2014, 15:13
    #38700455
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
Програмёра как по мне, так приведён вполне нормальный код (возможно в контексте задачи это и криворуко, но с той информацией, что ты дал - нормально). Если ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ).

Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется.

Чаще всего строгое сравнение писать лень и пишем по привычке if (str), а затем долго ищем баги в своём же быдлокоде, удивляясь почему не работает, но со временем привыкаешь
...
Рейтинг: 0 / 0
18.07.2014, 17:39
    #38700663
The_ShadoW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
ПрограмёрЕсли ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ).

Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется.
Я бы сказал, что если вы не знаете, какие у вас в коде данные в str -- никакие строгие проверки вам не помогут.
В случае с языками с контролем типов уточнять тип где можно -- это всегда здорово: компилятор даст отлуп, если что не так, и скажет, что же именно не так.
В случае с JS -- если у вас в str вообще-то предполагается строка, но "вдруг" может оказаться и boolean, и вообще какой-нибудь левый объект -- никакие строгие проверки вас всё равно не спасут. Всегда можно будет подсунуть что-то, проходящее проверку, но корректным типом данных не являющимся (для вышеприведенного примера -- например, { length: "tra-la-la" } в качестве str пройдёт). Поэтому, как я и писал выше -- если уж есть сомнение в типе данных -- то надо проверять именно тип, а не лепить N строгих проверок.

А если же вы пишете какой-то внутренний код, и тем не менее, не знаете, какого типа у вас могут оказаться данные... строгие проверки вам помогут примерно как тёплый чай от инсульта.

st_stЧаще всего строгое сравнение писать лень и пишем по привычке if (str), а затем долго ищем баги в своём же быдлокоде, удивляясь почему не работает, но со временем привыкаешь
Чаще всего это всё равно заканчивается долгим выяснением в духе "но у меня же тут должна быть строка? почему у меня тут не строка?". Строгая проверка от силы поможет заметить это чуть раньше. Ключевое слово "чуть".
...
Рейтинг: 0 / 0
18.07.2014, 18:46
    #38700745
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
The_ShadoW,

Ситуацию я уже описал :)

Как я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект). Потому в моём коде проверка типа if(!str) даст неоднозначный результат (условие выполнится и в случае удачного выполнения с возвратом пустых данных, и в случае ошибки). Потому в зависимости от моих потребностей я выполняю ту или иную СТРОГУЮ проверку :)

А у автора служебных значений может быть и больше, или принципы их использования могут быть другие... вот и всё.
...
Рейтинг: 0 / 0
18.07.2014, 20:19
    #38700809
The_ShadoW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
ПрограмёрКак я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект).
Это ваше "строгое правило" когда-нибудь вас по темечку и огреет. Возвращать в функции данные ДВУХ разных типов (исключая случай, когда функция возвращает boolean), да еще и как "строгое правило"?

Неудивительно, что вам после этого строгие проверки нужны. Это всё выглядит как "я постоянно стреляю себе из дробовика в ногу, но чтоб было не так больно, я перед этим обезболивающее колю".
...
Рейтинг: 0 / 0
19.07.2014, 00:27
    #38700888
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JS. Проверка на существование объекта
The_ShadoWПрограмёрКак я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект).
Это ваше "строгое правило" когда-нибудь вас по темечку и огреет. Возвращать в функции данные ДВУХ разных типов (исключая случай, когда функция возвращает boolean), да еще и как "строгое правило"?

Неудивительно, что вам после этого строгие проверки нужны. Это всё выглядит как "я постоянно стреляю себе из дробовика в ногу, но чтоб было не так больно, я перед этим обезболивающее колю".

одна функция у меня возвращает строго один из двух типов - boolean (точнее именно false при ошибке) или значение своего собственного типа (ну то есть того, который предусмотрен на выходе при штатном выполнении функции).

Если показалось, что на выходе у моей функции может быть любой из 5-6 типов (в зависимости от входа), то я имел ввиду не это (пояснил выше)

так вот, этот false я проверяю строгим соответствием... иначе можно принять пустой результат как ошибку :)


И всё же для любой ситуации я предпочитаю строгое соответствие (за исключением случаев, когда время - деньги, тогда конечно экономишь на символах по максимуму :) )
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS. Проверка на существование объекта / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]