的Javascript *和*用于字符串参数
在jQuery Mobile的我发现下面的代码操作:的Javascript *和*用于字符串参数
$.jqmData = function(elem, prop, value){
return $.data(elem, prop && $.mobile.ns + prop, value);
};
我不明白的是这个结构:
prop && $.mobile.ns + prop
它使用Javascript的逻辑和运营商,但为键参数为jQuery数据这是一个字符串参数。有人可以解释这个结构吗?
能有人请解释这个结构?
JavaScript的logical operators不仅适用于布尔值,而且适用于任何类型。他们将在内部convert the values to boolean检查他们的真实性,但他们不会改变结果类型。
对于字符串,只有空字符串被认为是虚假的。 AND运算符&&
的工作原理类似于“,如果左操作数是虚假的,则返回它,否则返回右操作数”。因此,如果在字符串prop
上调用,它将检查prop
是否为空字符串,然后将其返回,否则将其与$.mobile.ns
连接起来。它是
!prop ? prop : $.mobile.ns+prop
// or, if restricted to strings:
prop == "" ? "" : $.mobile.ns+prop
的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);
};
为了更好的理解,还应该注意''undefined'''''''''','''''''','''''''''','''''''' ''(falsy值)其他值(例如'''',''''',''“hello”'')评估为“true”(真实值)。 – prayerslayer
为什么这是upvoted?如果prop和$ .mobile.ns等于true,将使用* prop,如果其中一个为false,则将使用$ .mobile.ns *和扩展的代码,显然是错误的。 – Bergi
'(undefined && false)=== false'也是错误的。 – Bergi
快捷你从哪儿弄来这段代码,它看起来不同的(更容易理解)位置:https://github.com/jquery/jquery-mobile/blob/master/js /jquery.mobile.data.js#L92 – m90
毫无疑问,它是在客户端生产的* jQuery Mobile *的老版本。 – BruceHill
* jQuery *的相应版本是* 1.6.2 *,但这个问题更多地涉及到JavaScript构造。我知道你可以使用javascript ||运算符作为联合运算符,但从未见过以这种方式使用的&&运算符。 – BruceHill