2016-01-22 5 views
2

Я стараюсь стать лучше на сокращении. Может кто-то помочь прояснить ниже?Что происходит в этом сокращенном операторе?

(obj.getValue("title")) ? message += "\ntitle: " + obj.getValue("title") : null; 

Это, если obj имеет заголовок, то добавьте его в сообщение, иначе оно будет null?

+6

Вы получили его! То, что вы смотрите, это [тройной оператор] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). –

+0

В противном случае он возвращает null. 'obj.getValue (" title ")' может возвращать '0', и это не null. – Filipe

+8

Честное использование тернарного оператора, если честно, это было бы более четко написано как заявление if – aw04

ответ

2

Как указано в комментариях, это ternary operator. Это очень странное использование одного, так как это не на самом деле с помощью «другой» части оператора на что-нибудь полезное, и был бы более четко написано как:

if (obj.getValue("title")) { 
    message += "\ntitle: " + obj.getValue("title"); 
} 

Пока obj.getValue("title") является «truthy», это будет изменен message.

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

0

Вы правы, если OBJ имеет название, а затем добавить его к сообщению, но быть строгим, вы должны знать, что значение obj.getValue("title") не должно быть falsy (0, null, undefined, '', NaN, false), чтобы передать состояние.

Также вы можете использовать здесь другой вариант

obj.getValue("title") && (message += "\ntitle: " + obj.getValue("title")); 

Если obj.getValue("title") имеет truthy значение, чем операции в скобках вторых произведут. Также вы можете создать ссылку на obj.getValue("title").

var title = obj.getValue("title"); 
title && (message += "\ntitle: " + title); 

Лучше причина в этом случае метод getValue выполняется только один раз.

Сокращенное обозначение += добавляет значение obj.getValue("title") в message.