Условный `& amp; & amp;` оператор по свойству объекта отображает значение свойства в React [duplicate]

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

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
$Q1mrks = $_GET['q1mrks'];
$marks = $_GET['marks'];
$qt1 = $_GET['qt1'];

$qtype_qry = mysql_query("
    SELECT *
    FROM s_questiontypes
    WHERE quetype_id = '$qt1'
");
$row = mysql_fetch_assoc($qtype_qry);
$qcode = $row['quetype_code'];

$sq_qry = "
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    ORDER BY RAND() LIMIT $Q1mrks
";
$sq_qry = mysql_query("
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    LIMIT $Q1mrks
");
while ($qrow = mysql_fetch_array($sq_qry)) {
    $qm = $qrow['marks'] . "<br />";
    $total += $qm . "<br />";
}
echo $total . "/" . $marks;
}
42
задан Bergi 22 October 2015 в 09:14
поделиться

6 ответов

В принципе, логический оператор И (&&) вернет значение второго операнда, если первый - правy , и он вернет значение первого операнда, если оно сам falsy , например:

true && "foo"; // "foo"
NaN && "anything"; // NaN
0 && "anything";   // 0

Обратите внимание, что значения falsy - это те, которые принуждают к false при использовании в булевом контексте, они null, undefined, 0, NaN, пустая строка и, конечно, false, что-то еще прилегает к true.

61
ответ дан CMS 25 August 2018 в 08:38
поделиться

Согласно Аннотированный раздел 11.11 ECMAScript 5.1 :

В случае логического оператора OR (||),

expr1 || expr2 Возвращает expr1, если он может быть преобразован в true; в противном случае возвращает expr2. Таким образом, при использовании с булевыми значениями || возвращает true, если оба операнда истинны; если оба значения false, возвращает false.

В данном примере

var oneOrTheOther = someOtherVar || «Это не дроиды, которые вы ищете ... двигаться вперед»;

Результатом будет значение someOtherVar, если логическое значение (someOtherVar) истинно. (См. Truthiness of выражение ). Если это неверно, результатом будет «это не дроиды, которые вы ищете ... двигаться вперед»;

И в случае логического оператора AND (& amp;),

Возвращает expr1, если его можно преобразовать в false; в противном случае возвращает expr2. Таким образом, при использовании с булевыми значениями & amp; & amp; возвращает true, если оба операнда истинны; в противном случае возвращает false.

В данном примере,

case 1: когда Boolean (someOtherVar) является false: он возвращает значение someOtherVar.

case 2: когда Boolean (someOtherVar) истинно: он возвращает «это не дроиды, которые вы ищете ... двигаться вперед».

1
ответ дан BatScream 25 August 2018 в 08:38
поделиться

Цитирование Douglas Crockford 1:

Оператор && создает значение своего первого операнда, если первый операнд является ложным. В противном случае он выдает значение второго операнда.


1 Дуглас Крокфорд: JavaScript: Хорошие детали - Страница 16

18
ответ дан Daniel Vassallo 25 August 2018 в 08:38
поделиться

Я видел & amp; & amp; чрезмерное использование здесь при работе для операторов присваивания. Конкуренция двоякая: 1) Проверка индикатора иногда является функцией с накладными расходами, которые разработчики не учитывают. 2) Разработчики просто видят в нем проверку безопасности и не считают, что они присваивают ложные значения их var. Мне нравится, что у них есть тип безопасного типа, поэтому я их изменяю:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex();

:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex() || 0;

, поэтому они получают целое число, как ожидалось.

0
ответ дан Drew Deal 25 August 2018 в 08:38
поделиться

Пример для начинающих

Если вы пытаетесь получить доступ к «user.name», но тогда это происходит:

Uncaught TypeError: Cannot read property 'name' of undefined 

Не бойтесь. Вы можете решить это, используя & amp; & amp; оператор в задании или часто называемый сторожевым оператором, так как он «защищает» от неопределенной ошибки.

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

var user = undefined;
var username = user && user.username;
// no error, "username" assigned value of "user" which is undefined

user = { username: 'Johnny' };
username = user && user.username;
// no error, "username" assigned 'Johnny'

user = { };
username = user && user.username;
// no error, "username" assigned value of "username" which is undefined

Объяснение: В режиме охраны каждый термин оценивается слева направо по одному. Если оцениваемое значение является ложным, оценка останавливается и это значение затем назначается. Если последний элемент достигнут, тогда ему присваивается, является ли он ложным.

ложь означает, что это любое из этих значений undefined, false, 0, null, NaN, '', а правда просто означает НЕ ложь.

Легкая кнопка для метода Guard

Используйте прекрасный защитный оператор lodash для доступа к вложенным данным следующим образом:

// need to access obj.has.some.very.nested.stuff
var val = _.get(obj, 'has.some.very.nested.stuff');

, поскольку он обрабатывает & amp; & amp; & amp; & amp; материал под капотом, будучи приятным в использовании удобным способом. Исходный код Lodash _.get

Бонус: Оператор OR

Другим полезным странным назначением, которое в практическом использовании, является оператор OR, который обычно используется для таких плагинов:

this.myWidget = this.myWidget || (function() {
   // define widget
})();

, который будет назначать только часть кода, если «this.myWidget» является ложным. Это удобно, потому что вы можете объявлять код в любом месте и несколько раз, не заботясь о том, был ли он назначен или нет ранее, зная, что он будет назначен только один раз, поскольку люди, использующие плагин, могут несколько раз объявлять ваш скриптовый тег src несколько раз.

Объяснение: Каждое значение оценивается слева направо, по одному за раз. Если значение является правдивым, оно прекращает оценку и присваивает это значение, в противном случае продолжает движение, если последний элемент достигнут, он присваивается независимо от того, является ли он ложным или нет.

Дополнительный кредит: Объединение и amp; & амп; и || в задании

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

function palindrome(s,i) {
 return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}

Подробное объяснение здесь: Проверка палиндрома в Javascript

Счастливое кодирование.

11
ответ дан Jason Sebring 25 August 2018 в 08:38
поделиться

&& иногда называют оператором guard .

variable = indicator && value

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

19
ответ дан mykhal 25 August 2018 в 08:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: