【问题标题】:Why does this not return a boolean [duplicate]为什么这不返回布尔值[重复]
【发布时间】:2015-11-18 21:25:29
【问题描述】:

我继承了一些具有这一行的javascript:

var vehicle = data.vehicles && data.vehicles.length > 0 && data.vehicles[0];

这将返回 data.vehicles[0] 对象,不是真或假。为什么?

【问题讨论】:

  • 你为什么期望它返回一个布尔值?
  • JavaScript 中的&& 运算符的工作方式与其他语言中的类似运算符明显不同。
  • 请与我们分享您的变量值
  • 如果您希望语句返回布尔值,可以使用var vehicle = data.vehicles && data.vehicles.length > 0 && !!data.vehicles[0];
  • 或var vehicle = !! (data.vehicles && data.vehicles.length > 0 && data.vehicles[0]);,但很少需要这样做。

标签: javascript


【解决方案1】:

&& 和 || 不会专门返回布尔值。 && 返回最后一个真值(或第一个假值),|| 返回第一个真值或最后一个假值。

【讨论】:

  • 规则表on MDN解释得很好:expr1 && expr2,如果可以转换为false则返回expr1;否则,返回 expr2。
  • "|| 返回第一个假值。" 那么,true || false 返回什么?
  • @worc:但true 不是虚假值。根据答案,应该返回false。
  • 无论如何解释都不正确。 && 如果它是假的,则返回左操作数,否则返回右操作数。 || 如果为真则返回左操作数,否则返回右操作数。
  • 显然我也是。
【解决方案2】:

试试这个:

var vehicle = !!(data.vehicles && data.vehicles.length > 0 && data.vehicles[0]);

希望这个解释对您有所帮助: basic_truthy_falsy

【讨论】:

  • 嘿,谢谢你的回答,我更多的是寻找它发生的原因,而不是如何将其转换为布尔值:)
猜你喜欢
  • 2013-08-10
  • 2019-10-04
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
相关资源
最近更新 更多