|
|
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
Всем привет. Пусть есть объект: Код: javascript 1. Точнее, пусть его нет. Тогда проверка на его существование будет, например, такой: Код: javascript 1. А как быть, если мне нужно проверить такой объект: config.showcase.interval? Аналогичная проверка уже вызывает ошибку: Код: javascript 1. Наверное, это азы, но я что-то не смог быстро найти ответ. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 23:30 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
urukhayВсем привет. Пусть есть объект: Код: javascript 1. Точнее, пусть его нет. Тогда проверка на его существование будет, например, такой: Код: javascript 1. А как быть, если мне нужно проверить такой объект: config.showcase.interval? Аналогичная проверка уже вызывает ошибку: Код: javascript 1. Наверное, это азы, но я что-то не смог быстро найти ответ. Заранее спасибо! config.showcase.interval - это не объект, а если по простому, то путь из ссылок (ссылка на ссылку на ссылку). А поведение вполне правильное. Если бы я Вам сказал: "Если тебе нужно узнать дома ли Вася - пойди к Пете, он знает где найти Машу, которая знает как связаться с Васей, что бы это узнать", как думаете, что бы Вы могли предпринять, если бы не нашли Петю?! правильно, сказали что я Вам мозги морочу и даже не стали бы уже Машу искать )) Так вот, не морочьте интерпретатору мозги ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 23:41 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
Member! Если вопрос морочит Вам голову, то не лезьте в такой топ. Есть конкретная задача, ее надо решить. Если она не решаема - так и скажите: "Такую проверку сделать нельзя". Хотя как минимум можно проверить каждый узел в цепочке: Код: javascript 1. Но я спрашиваю про более короткий вариант: возможно ли. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 00:18 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
urukhay Код: javascript 1. Но я спрашиваю про более короткий вариант: возможно ли. Спасибо. Конечно: Код: javascript 1. Более короткий вариант? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 09:19 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
urukhayMember! Если вопрос морочит Вам голову, то не лезьте в такой топ. Есть конкретная задача, ее надо решить. Если она не решаема - так и скажите: "Такую проверку сделать нельзя". Хотя как минимум можно проверить каждый узел в цепочке: Код: javascript 1. Но я спрашиваю про более короткий вариант: возможно ли. Спасибо. Если более короткий по количеству букв - уже написали. Только есть побочный эффект, проверка проводится не строгая. А по поводу "морочить голову", это был наводящий ответ, который должен был дать понять, что кроме как проверить каждый элемент цепочки по отдельности, решить задачу не возможно. Как оказалось, Вы это знаете, но зачем-то спрашиваете общую концепцию, вместо того, что бы спросить: "знаю что можно так, но это как-то не круто, как сделать иначе?" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 10:41 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
За участие и помощь всем спасибо! А насчет вопроса - какая разница как спрашивать, главное, чтобы суть вопроса была понятна ) Я просто думал, что возможно есть какая-то хитрая функция или способ не проверять все по отдельности. Начал гуглить - нашел, вот решил спросить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:13 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
urukhayЯ просто думал, что возможно есть какая-то хитрая функция...Есть конечно: монады всякие, разбор пути (path)... urukhayНачал гуглить - нашел, вот решил спросить.Ну вот надо было более конкретно спрашивать: "Что лучше мне использовать из того, что я нашёл в гугле?". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:26 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
ПрограмёрТолько есть побочный эффект, проверка проводится не строгая. Я немного пооффтоплю, потому что наболело. Так вот, лучше один раз взять доку, и понять правила преобразования типов в ECMAScript, чем всю жизнь насиловать себя и работающих с вашим кодом коллег этими === на 100500 лишних символов. Лично мои нервы не выдержали, когда я прочитал на одном code review такое: Код: javascript 1. На мой взгляд, строгие проверки в JS нужны ровно в одном случае: если ты сидишь и пишешь фреймворк. То есть, что-то такое, с чем будут потом работать какие-то непонятные быдлокодеры, так прямо и желающие поломать твой код всеми возможными способами. Вот там оно в какой-то мере может быть оправдано (да и то дешевле и экономнее будет просто тщательно проверять типы входящих данных перед дальнейшей работой с ними). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2014, 19:23 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
The_ShadoWПрограмёрТолько есть побочный эффект, проверка проводится не строгая. Я немного пооффтоплю, потому что наболело. Так вот, лучше один раз взять доку, и понять правила преобразования типов в ECMAScript, чем всю жизнь насиловать себя и работающих с вашим кодом коллег этими === на 100500 лишних символов. Лично мои нервы не выдержали, когда я прочитал на одном code review такое: Код: javascript 1. На мой взгляд, строгие проверки в JS нужны ровно в одном случае: если ты сидишь и пишешь фреймворк. То есть, что-то такое, с чем будут потом работать какие-то непонятные быдлокодеры, так прямо и желающие поломать твой код всеми возможными способами. Вот там оно в какой-то мере может быть оправдано (да и то дешевле и экономнее будет просто тщательно проверять типы входящих данных перед дальнейшей работой с ними). а как по мне, так приведён вполне нормальный код (возможно в контексте задачи это и криворуко, но с той информацией, что ты дал - нормально). Если ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ). Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 14:40 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
Програмёра как по мне, так приведён вполне нормальный код (возможно в контексте задачи это и криворуко, но с той информацией, что ты дал - нормально). Если ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ). Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется. Чаще всего строгое сравнение писать лень и пишем по привычке if (str), а затем долго ищем баги в своём же быдлокоде, удивляясь почему не работает, но со временем привыкаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 15:13 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЕсли ты предлагаешь сделать проверку типа if(str) , то условие не выполнится, если str===0 и str===false, что может не соответствовать намерениям автора (например str===null - это вполне нормально, а str===false при ошибке :) ). Я бы сказал наоборот, что нестрогое сравнение нужно применять только там, где это явно требуется. Я бы сказал, что если вы не знаете, какие у вас в коде данные в str -- никакие строгие проверки вам не помогут. В случае с языками с контролем типов уточнять тип где можно -- это всегда здорово: компилятор даст отлуп, если что не так, и скажет, что же именно не так. В случае с JS -- если у вас в str вообще-то предполагается строка, но "вдруг" может оказаться и boolean, и вообще какой-нибудь левый объект -- никакие строгие проверки вас всё равно не спасут. Всегда можно будет подсунуть что-то, проходящее проверку, но корректным типом данных не являющимся (для вышеприведенного примера -- например, { length: "tra-la-la" } в качестве str пройдёт). Поэтому, как я и писал выше -- если уж есть сомнение в типе данных -- то надо проверять именно тип, а не лепить N строгих проверок. А если же вы пишете какой-то внутренний код, и тем не менее, не знаете, какого типа у вас могут оказаться данные... строгие проверки вам помогут примерно как тёплый чай от инсульта. st_stЧаще всего строгое сравнение писать лень и пишем по привычке if (str), а затем долго ищем баги в своём же быдлокоде, удивляясь почему не работает, но со временем привыкаешь Чаще всего это всё равно заканчивается долгим выяснением в духе "но у меня же тут должна быть строка? почему у меня тут не строка?". Строгая проверка от силы поможет заметить это чуть раньше. Ключевое слово "чуть". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 17:39 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
The_ShadoW, Ситуацию я уже описал :) Как я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект). Потому в моём коде проверка типа if(!str) даст неоднозначный результат (условие выполнится и в случае удачного выполнения с возвратом пустых данных, и в случае ошибки). Потому в зависимости от моих потребностей я выполняю ту или иную СТРОГУЮ проверку :) А у автора служебных значений может быть и больше, или принципы их использования могут быть другие... вот и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 18:46 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
ПрограмёрКак я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект). Это ваше "строгое правило" когда-нибудь вас по темечку и огреет. Возвращать в функции данные ДВУХ разных типов (исключая случай, когда функция возвращает boolean), да еще и как "строгое правило"? Неудивительно, что вам после этого строгие проверки нужны. Это всё выглядит как "я постоянно стреляю себе из дробовика в ногу, но чтоб было не так больно, я перед этим обезболивающее колю". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 20:19 |
|
||
|
JS. Проверка на существование объекта
|
|||
|---|---|---|---|
|
#18+
The_ShadoWПрограмёрКак я говорил, у меня есть строгое правило, при неудачном выполнении функции возвращать false, в ином случае возвращать правильный ответ (которым может быть null, любая строка, число или объект). Это ваше "строгое правило" когда-нибудь вас по темечку и огреет. Возвращать в функции данные ДВУХ разных типов (исключая случай, когда функция возвращает boolean), да еще и как "строгое правило"? Неудивительно, что вам после этого строгие проверки нужны. Это всё выглядит как "я постоянно стреляю себе из дробовика в ногу, но чтоб было не так больно, я перед этим обезболивающее колю". одна функция у меня возвращает строго один из двух типов - boolean (точнее именно false при ошибке) или значение своего собственного типа (ну то есть того, который предусмотрен на выходе при штатном выполнении функции). Если показалось, что на выходе у моей функции может быть любой из 5-6 типов (в зависимости от входа), то я имел ввиду не это (пояснил выше) так вот, этот false я проверяю строгим соответствием... иначе можно принять пустой результат как ошибку :) И всё же для любой ситуации я предпочитаю строгое соответствие (за исключением случаев, когда время - деньги, тогда конечно экономишь на символах по максимуму :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2014, 00:27 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38700888&tid=1446893]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 479ms |

| 0 / 0 |
