什麼是& &在這段JavaScript代碼的含義與運算符?意義在此行
function doIt(a) {
var b = a.parents(),
c = 1;
return b.each(function() {
jQuery(this).hasClass("free-content") && (c = 0)
}), c
}
通常我會認爲這將是一個邏輯運算符AND,但我無法弄清楚它在這一行中的作用。
什麼是& &在這段JavaScript代碼的含義與運算符?意義在此行
function doIt(a) {
var b = a.parents(),
c = 1;
return b.each(function() {
jQuery(this).hasClass("free-content") && (c = 0)
}), c
}
通常我會認爲這將是一個邏輯運算符AND,但我無法弄清楚它在這一行中的作用。
邏輯AND操作者在這種情況下,代替IF語句來的被使用。它將爲c
到0
如果jQuery(this).hasClass("free-content")
返回truthy值。
它等同於:
if (jQuery(this).hasClass("free-content")) {
c = 0;
}
你想知道這是什麼意思其實是我不喜歡這種類型的編碼,並認爲這是一個不好的做法的原因。這很難閱讀,並可能造成混亂,反過來可能會產生錯誤。
這也是值得一提的是什麼邏輯和回報,如果你想使用返回值:
(邏輯與)返回表達式1,如果它可以轉換爲false;否則,返回expr2。因此,利用布爾值使用時,& &返回true,如果這兩個操作數都爲真;否則,返回false。
這裏是展示一個例子,在我看來,糟糕的代碼,因爲它難以遵循:
var foo = bar && baz || qux;
上面的代碼等同於:
var foo;
if (bar && baz) {
foo = baz;
} else {
foo = qux;
}
總結:不要使用邏輯運營商作爲漂亮的方式來取代IF語句或保存擊鍵。它很可能會回來,咬你或其他人的屁股。
我知道會有人在這方面與我爭論(通常是因爲ASI而不希望使用分號的人),但編寫只有專家才能理解的代碼是一個非常糟糕的主意。沒有任何理由反對它。
return b.each(function() {
jQuery(this).hasClass("free-content") && (c = 0)
}), c
b.each
環比在b
所有條目,並檢查當前元素是否具有類free-content
集。 只有如果產生true,則表達式的第二部分被評估 - 因爲它們經由&&
級聯和JavaScript停止評估這樣的表達時,第一部分是假的,因爲然後整個表達式不能成爲真正的任何更。
所以,如果有是與該類的元素,所述第二部分被評估 - 並且由此c
被設置爲值0
(因爲這是賦值運算=
那裏,而不是一個比較)。
這each
循環結束後,c
值返回到外 - 因爲each()
和c
經由comma operator ,
這裏,從左至右,然後「返回」第二個評估其操作數相連。
JavaScript允許大量的「花哨」的編碼就是這樣,但是馬庫斯在他的答覆中說,這是難以閱讀,並沒有實際的優勢在這裏了,說
b.each(function() {
if(jQuery(this).hasClass("free-content")) {
c = 0;
return false;
}
});
return c;
我在each
循環裏面加了return false
,因爲一旦我們找到了這個類的元素,我們就不需要再搜索其餘的元素了 - 這就是那些提出原始代碼的人忘了做的事情在他們所有的「幻想」中......他們的循環將繼續遍歷所有的b
的el如果它在第一輪中發現了它正在尋找的元素,那麼無關緊要。
嘗試獲取非縮小的來源。 – Bergi