在jQuery Mobile中,我找到以下代码:
$.jqmData = function( elem, prop, value ){
return $.data( elem, prop && $.mobile.ns + prop, value );
};
我不明白的是这个结构:
prop && $.mobile.ns + prop
它使用Javascript 的逻辑和运算符,但用于jQuery 数据的关键参数,它是一个字符串参数。有人可以解释一下这个结构吗?
在jQuery Mobile中,我找到以下代码:
$.jqmData = function( elem, prop, value ){
return $.data( elem, prop && $.mobile.ns + prop, value );
};
我不明白的是这个结构:
prop && $.mobile.ns + prop
它使用Javascript 的逻辑和运算符,但用于jQuery 数据的关键参数,它是一个字符串参数。有人可以解释一下这个结构吗?
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
,如果prop
AND$.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 );
};
有人可以解释一下这个结构吗?
JavaScript 的逻辑运算符不仅适用于布尔值,而且适用于任何类型。他们将在内部将值转换为布尔值以检查其真实性,但不会更改结果类型。
对于字符串,只有空字符串被认为是虚假的。AND 运算符的&&
作用类似于“如果左操作数为假,则返回它,否则返回右操作数”。因此,如果在 string 上调用prop
,它将检查是否prop
为空字符串,然后将其返回,否则将其与$.mobile.ns
. 这是一条捷径
!prop ? prop : $.mobile.ns+prop
// or, if restricted to strings:
prop == "" ? "" : $.mobile.ns+prop