11.08.2015, 14:33
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
В общем, если я тебя правильно понял, тебе нужна вот такая вот параша
check=function(object, name){
return name in object&&object[name]!== undefined&&object[name]!==""
}
object={real: {}, emptyString: ""}
alert([
check(object, "emptyString"),
check(object, "undef"),
check(object, "real")
]
)
Последний раз редактировалось javaQest, 11.08.2015 в 14:41.
|
|
11.08.2015, 14:48
|
Кандидат Javascript-наук
|
|
Регистрация: 16.02.2012
Сообщений: 109
|
|
Слушай я уже до самого простого упростил вопрос
Слушай. Я же уже до простого упростил вопрос, забудь то что выше, если не понятно. Объясни следующее.
//Как получается
If (typeof obj1 !=’undefined’){
If (typeof obj1.obj2 !=’undefined’){
If (typeof obj1.obj2.obj3 !=’undefined’){
var value= obj1.obj2.obj3[0]
}
}
}
//Нужно что-то вроде этого, но без остановки скрипта по ошибкам вроде:
//obj1 - undefined
//obj1.obj2 - undefinded
If (typeof obj1.obj2.obj3 !=’undefined’){
var value= obj1.obj2.obj3[0]
}
Что касается full_null эта функция пользовательская, мне нужно чтобы значение не было пустым
|
|
11.08.2015, 14:54
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
вот так попробуй
if(window.obj1&&obj1.obj2&&obj1.obj2.obj3&&obj1.obj2.obj3!==undefined) somecode
|
|
11.08.2015, 15:01
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
vuler,
А вообще, тебе проще оборачивать в try. Но что-то у тебя явно там не так. В нормальном коде едва ли такое может понадобиться.
|
|
11.08.2015, 15:42
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
для начала скажите чему равен
console.log(this.form.rulers.format)
я так понял у вас ошибка в "this", попробуйте использувать напрямую нужную вам переменную)
|
|
11.08.2015, 15:50
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
Сообщение от vuler
|
В результате приходится вначале делать проверку на наличие массива - format, а затем уже проверять на наличие в нем this.name. Можно как-то задать проверку в одну строку без двойных условий и try-catch конструкций?
|
аа, вот оно чё)
нет, тут наверное никак, если массива нету выдаст ошибку(так и есть)
можно попробывать так
function full_null(elem){//Проверка на полный ноль. отстутсвие или несуществование.
if (elem=='undefined' || elem==null || elem==""){
return true;
}else return false;
}
if (full_null(this.form.rulers.format) && full_null(this.form.rulers.format[this.name]))
this.rulers.format=this.form.rulers.format[this.name];
|
|
11.08.2015, 15:52
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
Сообщение от KosBeg
|
нет, тут наверное никак, если массива нету выдаст ошибку(так и есть)
|
Проверка на наличие переменной
|
|
11.08.2015, 15:58
|
Кандидат Javascript-наук
|
|
Регистрация: 16.02.2012
Сообщений: 109
|
|
Сообщение от KosBeg
|
для начала скажите чему равен
console.log(this.form.rulers.format)
я так понял у вас ошибка в "this", попробуйте использувать напрямую нужную вам переменную)
|
Да нет тут все в порядке с this, просто думал в js есть какае-нибудь дельные функции для проверок .
В php все проще.
if ($rrrr->ssss->form_rulersq['sss']) {
echo 'тут';
}else{
echo 'там';
}
Например этот код пройдет легко. php плевать на то что объекта rrrr не существует, что в нем не существует объект ssss, что в объекте ssss нет массива form_rulersq и т.д.
просто выдаст условие else и продолжит работу. А js начинает проверять существование всей этой цепочки
|
|
11.08.2015, 16:36
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
Сообщение от vuler
|
А js начинает проверять существование всей этой цепочки
|
да ничо он не проверяет. У тебя ошибка из-за доступа к свойству undefined, которого не существует.
undefined.foo
любой нормальный язык в этом случае по дефолту отдаст ошибку. Я хз, что там у вас в похапе.за идиотизм, скорей всего просто сахар.
|
|
11.08.2015, 16:53
|
Кандидат Javascript-наук
|
|
Регистрация: 16.02.2012
Сообщений: 109
|
|
Сообщение от javaQest
|
да ничо он не проверяет. У тебя ошибка из-за доступа к свойству undefined, которого не существует.
undefined.foo
любой нормальный язык в этом случае по дефолту отдаст ошибку. Я хз, что там у вас в похапе.за идиотизм, скорей всего просто сахар.
|
А вот на счет этого я бы поспорил, что лучше . Для тебя лучше на Сишке все переменные заранее объявлять, прежде чем с ними что-то делать? И ловить ошибки каждый раз, если ты их не объявил. Или лучше объявлять их динамически, кода понадобятся. Тут можно спорить долго конечно. Везде свои плюсы и минусы. Согласен, что ошибки из-за неверного написания переменных порой заставляют потратить время на их поиск.
|
|
|
|