3

jQuery Mobile中,我找到以下代码:

$.jqmData = function( elem, prop, value ){
   return $.data( elem, prop && $.mobile.ns + prop, value );
};

我不明白的是这个结构:

prop && $.mobile.ns + prop

它使用Javascript 的逻辑和运算符,但用于jQuery 数据的关键参数,它是一个字符串参数。有人可以解释一下这个结构吗?

4

2 回答 2

4

Javascript 在使用布尔运算符时不会隐式返回布尔值:

&&返回第二个元素,如果两个元素都等于true或第一个,如果其中一个是false ||返回第一个元素,如果它等于true,或者第二个,如果第一个匹配false

一些例子:

("foo" && "bar") === "bar"
(1 && "foo") === "foo"
(undefined && false) === undefined
(1 || "foo") === 1
(0 || "foo") === "foo"
(undefined || "foo") === "foo"
(undefined || 1) === 1
(undefined || false) === false

您来自 jQuery mobile 的案例:

prop && $.mobile.ns + prop- 在这种情况下prop,如果propAND$.mobile.ns等于 将使用true。如果其中之一是false,$.mobile.ns将被使用。我认为在这种情况下,它在prop === null等于空字符串时使用。

您可以将其扩展为:

$.jqmData = function( elem, prop, value ){
   if(prop == false) 
      prop = $.mobile.ns

   return $.data( elem, prop + prop, value );
};
于 2013-08-26T12:19:44.957 回答
2

有人可以解释一下这个结构吗?

JavaScript 的逻辑运算符不仅适用于布尔值,而且适用于任何类型。他们将在内部将值转换为布尔值以检查其真实性,但不会更改结果类型。

对于字符串,只有空字符串被认为是虚假的。AND 运算符的&&作用类似于“如果左操作数为假,则返回它,否则返回右操作数”。因此,如果在 string 上调用prop,它将检查是否prop为空字符串,然后将其返回,否则将其与$.mobile.ns. 这是一条捷径

!prop ? prop : $.mobile.ns+prop
// or, if restricted to strings:
prop == "" ? "" : $.mobile.ns+prop
于 2013-08-26T12:27:09.987 回答