JavaScript 求值如何返回对象?

发布于 12-13 15:23 字数 283 浏览 1 评论 0原文

我不希望您理解这段代码的含义:

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

return columnOverrides.formatter;

但是从语法上讲,逻辑表达式的求值如何返回对象?

I don't expect you to understand what was meant with this piece of code:

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

return columnOverrides.formatter;

But syntactically, how can the evaluation of a logical expression return an object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不即不离2024-12-20 15:23:55

在 JavaScript 中,&&|| 不一定返回 true 或 false。他们返回了他们的论点之一。

  • 一个|| b 大致相当于 a ? a:b
  • a && b 大致相当于 a ? b:a

更多信息可以在这里找到:

In JavaScript && and || don't necessarily return true or false. They return one of their arguments.

  • a || b is roughly equivalent to a ? a : b.
  • a && b is roughly equivalent to a ? b : a.

More information can be found here:

情魔剑神2024-12-20 15:23:55

在 JavaScript 中,a && b 首先评估 a。如果 afalsy 值,则它返回a,否则返回b一个|| 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);

In JavaScript, a && b evaluates a first. If a is a falsy value, then it returns a, otherwise it returns b. a || b works the same; if a is truthy, return a, else return b.

This can lead to some really nice and concise yet clear code (once you understand it) like "get the first non-null value":

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

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

Or easy cross-browser events:

var f = window.addEventListener || window.attachEvent || (function() {});
f.call(window, 'load', function() {
     alert('Loaded!');
}, false);
触ぅ动初心2024-12-20 15:23:55

正如问题得到回答 - 我认为这段代码中有一个但是 - 如果 rowMetadatanullundefined 或类似的情况,它将中断,并且如果您使用 && 这是一种可能性。请注意。

最后一行还应该是:

return columnOverrides && columnOverrides.formatter;

As the question was answered - I think there is a but in this code - if rowMetadata is null or undefined or such it will break, and if you're using && it IS a possibility. Just a heads up.

last line should be also:

return columnOverrides && columnOverrides.formatter;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文