Как оценка JavaScript может вернуть объект? - PullRequest
1 голос
/ 06 ноября 2011

Я не ожидаю, что вы поймете, что означало с этим фрагментом кода:

var columnOverrides = rowMetadata &&
    rowMetadata.columns &&
    (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);

return columnOverrides.formatter;

Но синтаксически, как оценка логического выражения может вернуть объект?

Ответы [ 3 ]

8 голосов
/ 06 ноября 2011

В JavaScript && и || не обязательно возвращают true или false. Они возвращают один из своих аргументов.

  • a || b примерно эквивалентно a ? a : b.
  • a && b примерно эквивалентно a ? b : a.

Более подробную информацию можно найти здесь:

4 голосов
/ 06 ноября 2011

В JavaScript a && b сначала оценивает a.Если a является значением falsy , то возвращается a, в противном случае возвращается b.a || b работает так же;если a является правдивым, верните a, иначе верните b.

Это может привести к какому-то действительно хорошему и лаконичному, но ясному (как только вы его поймете) коду, например: «получить первый ненулевой»значение ":

var a = null;
var b = null;
var c = 5;
var d = "Hello";

alert(a && b && c && d); // 5

Или простые кросс-браузерные события:

var f = window.addEventListener || window.attachEvent || (function() {});
f.call(window, 'load', function() {
     alert('Loaded!');
}, false);
2 голосов
/ 06 ноября 2011

Поскольку на вопрос был дан ответ - я думаю, что в этом коде есть но - если rowMetadata равно null или undefined или тому подобное, оно сломается, и если вы используете &&, это ВОЗМОЖНО , Просто один на один.

последняя строка также должна быть:

return columnOverrides && columnOverrides.formatter;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...