用于字符串参数的Javascript*和*运算符
在jQuery Mobile中,我发现以下代码:用于字符串参数的Javascript*和*运算符,javascript,Javascript,在jQuery Mobile中,我发现以下代码: $.jqmData = function( elem, prop, value ){ return $.data( elem, prop && $.mobile.ns + prop, value ); }; 我不明白的是这个结构: prop && $.mobile.ns + prop 它使用Javascript的逻辑and运算符,但用于jQuery数据的关键参数,它是一个字符串参数。有人能解释一下这个构造
$.jqmData = function( elem, prop, value ){
return $.data( elem, prop && $.mobile.ns + prop, value );
};
我不明白的是这个结构:
prop && $.mobile.ns + prop
它使用Javascript的逻辑and运算符,但用于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
和$.mobile.ns
等于true
,则将使用prop
。如果其中一个为false
,则将使用$.mobile.ns
。我认为在这种情况下,它是在prop===null
等于空字符串时使用的
您可以将其扩展到:
$.jqmData = function( elem, prop, value ){
if(prop == false)
prop = $.mobile.ns
return $.data( elem, prop + prop, value );
};
有人能解释一下这个结构吗
JavaScript不仅适用于布尔语言,而且适用于任何类型。他们将在内部检查其真实性,但不会更改结果类型
对于字符串,只有空字符串被认为是错误的。AND运算符&&
的工作原理类似于“如果左操作数错误,则返回它,否则返回右操作数”。因此,如果在字符串prop
上调用,它将检查prop
是否为空字符串,然后返回它,或者将它与$.mobile.ns
连接起来。这是一条捷径
!prop ? prop : $.mobile.ns+prop
// or, if restricted to strings:
prop == "" ? "" : $.mobile.ns+prop
你从哪里得到这段代码的,它在这里看起来不同(而且更容易理解):它是一个客户端站点上生产的jQuery Mobile的旧版本。jQuery的对应版本是1.6.2,但这个问题更多地涉及javascript构造。我知道您可以使用javascript | |运算符作为合并运算符,但以前从未见过以这种方式使用的&&运算符。为了更好地理解,还应该注意,
未定义的
、null
、NaN
、0
、”
和false
计算为false
(falsy值)当其他每一个值(如{}
,[]
,“hello”
)计算为true
(truthy值)时,为什么会进行上选?“如果prop和$.mobile.ns等于true,将使用prop。如果其中一个值为false,将使用$.mobile.ns”,并且扩展的代码完全错误。(未定义和(&false)===false
也是错误的。我认为它被提高了投票率,因为它比上一个答案(现在被删除)更接近准确,这意味着表达式将返回“true”或“false”@BruceHill:是的,可能吧。第一句话对我来说也很好,但从那以后,质量下降到了一团混乱:-(啊。好吧。这是有道理的。我认为布尔运算符总是返回true或false。谢谢,Bergi。经过这一解释后,这个构造更有意义。