2014-02-03 2 views
-1

У меня есть JQuery и не возражали бы использовать его, но вот код, который я хотел бы очистить:Очистка если заявление Javascript

if (parent.uglyChild.uglyChild.uglyChild.uglyChild.data == null) { 
    parent.uglyChild.uglyChild.uglyChild.uglyChild.data = new app.newData(); 
} 

Единственный способ я знаю, как очистить его является:

var data = parent.uglyChild.uglyChild.uglyChild.uglyChild.data; 
if (data == null) { data = new app.newData()} 

Я всегда задавался вопросом, есть ли способ сделать что-то вроде:

parent.uglyChild.data = parent.uglyChild.data.isNull ? return : new app.newData(); 

Я не могу ждать, чтобы увидеть сокращенную трюк вы, ребята, знаете! :)

+2

Какие объекты здесь? DOM или просто объекты? – Pointy

+1

Вы получили его на шаге 2 - никаких дальнейших * «трюков» *. – Emissary

+0

@ Emissary за исключением этого не будет работать :) – Pointy

ответ

1

Вы могли бы сделать что-то вроде

var ugly = parent.uglyChild.uglyChild.uglyChild.uglyChild; 
ugly.data == null && (ugly.data = value) 
+0

Oh durr; извините, ребята :) – Pointy

+0

How/why this work? – borkith

+0

@borkith Это называется охранником. Ознакомьтесь с этой статьей. http://seanmonstar.com/post/707078771/guard-and-default-operators –

1

можно кэшировать ближайший объект, чтобы избежать повторения, благодаря негерметичных заданий JS в:

if ((x=parent.uglyChild.uglyChild.uglyChild.uglyChild).data == null) { 
    x.data = value; 
} 
+0

вы хотите использовать 'var x'. – Emissary

+0

@ Emissary только что видел ваш комментарий, я спрашивал об этом – borkith

+0

Я согласен, я просто показывал механику ... – dandavis

0

Если вы хотите использовать тройной оператор, вы всегда можете переназначить значение.

parent.uglyChild.data = (parent.uglyChild.data == null) ? null : value;

+1

Это и длиннее и менее эффективно, чем 'if (parent.uglyChild.data == null) parent.uglyChild.data = value', так как он * всегда * присваивает. – Matt

+0

Ahhh. В моем случае значение - это новый объект. Я должен отредактировать это, потому что это переназначает существующие данные новому объекту. – borkith

+0

@borkith означает, что он всегда будет выполнять задание, даже если он уже «null». – thgaskell

Смежные вопросы