【问题标题】:In a javascript OR statements, which value is used if both values are defined?在 javascript OR 语句中,如果定义了两个值,则使用哪个值?
【发布时间】:2012-11-25 21:03:33
【问题描述】:

我有以下sn-p:

var prevPageWrap = data.prevPage.jqmData("wrapper"),
    pageBackBtn = page.closest('div:jqmData(wrapper="true")').jqmData("usebackbtn"),
    useBackBtn =  pageBackBtn || o.useBackBtn;

if ( useBackBtn && !prevPageWrap ){
    self.crumble(event, data, page );
    }   

我的问题是useBackBtn。我在我的 HTML 元素中将 usebackbtn 设置为 false,如下所示:

<div data-role="page" id="landing" data-wrapper="true" data-scrollmode="overthrow" data-usebackbtn="false">

</div>

我也可以检索到。

还是

useBackBtn =  pageBackBtn || o.useBackBtn;

设置为 true,尽管 pageBackBtn 为 false。

问题
如果第一个“选项”为假而第二个选项为真,useBackBtn 的值将是什么 = 什么取代了什么?是否有一种简写的语法方式来表示“如果定义了第一个选项,则接受它,否则尝试第二个选项?”

谢谢!

【问题讨论】:

  • 您需要注意,您可能得到的字符串“false”的计算结果为 true。

标签: javascript jquery jquery-selectors options


【解决方案1】:

如果第一个“选项”为假,而第二个选项为真,useBackBtn = 的值将是什么?取代什么?

第二个选项。

如果a 为真值,则a || b 评估为a,否则评估为b

是否有一种简写的语法方式来表示“如果定义了第一个选项,则接受它,否则尝试第二个选项?”

使用三元运算符。

var a, b, result;
a = 0;
b = 1;
result = typeof a !== "undefined" ? a : b
alert(result)

【讨论】:

  • 从技术上讲,|| 是 JavaScript 中的惰性逻辑或运算符。它只在必要时评估第二个操作数,因为第一个参数是假的。请注意,我没有说 false,因为 JavaScript 有一些非常不寻常的真假概念,其中空字符串、null0 以及 false 都是假的。这种奇怪导致 JavaScript 中的约定 x || y 意味着使用 x 作为默认值,如果 x 不存在则使用 y。在我看来,糟糕的语言设计,但就是这样。
  • @SAJ14SAJ:FWIW,这些值在其他语言中也是“假的”。 OR 运算符的“惰性”评估称为短路评估:en.wikipedia.org/wiki/Short-circuit_evaluation
  • @Quentin: jslint 不会抱怨使用typeof a !== "undefined"a === undefined 吗?
  • @SAJ14SAJ:我同意。我想说的是,如果你也习惯了其他语言,它似乎就不那么奇怪了。这只是一个观点问题。如果if(0) 会评估为true,我会完全感到困惑;)
  • @FelixKling 我仍然带着 C 的伤痕,我们使用小整数作为布尔值,而字符、整数、布尔值和指针实际上无法区分。我喜欢我的类型坚定地知道它们是什么——这并不是说我不喜欢动态类型(哦,我喜欢,我喜欢),我只是想让我的动态类型知道他们是谁。 :-) 我同意if (0) 不应该是真的,但我认为这应该是一个错误。
猜你喜欢
  • 1970-01-01
  • 2019-12-23
  • 2021-07-19
  • 1970-01-01
  • 2017-01-22
  • 2017-06-24
  • 2016-04-08
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多