回答
呃,那太噁心了。這裏是發生了什麼:
!!boolean
這原來boolean
成真/假布爾值。 !
是否定,所以當你做兩個時,你強制否定的否定,或原始的布爾值。基本上,它的作用:
var x = boolean;
if (x) {
x = true;
} else {
x = false;
}
的+
接通右側成多個。 +true
→1
和+false
→0
。第一位是數組。它是通過右側的任何數據索引數組字面值。
總之,如果boolean
是真的,它將抓住第二個元素,否則第一個。這
[-1,1][+!!true] === 1
[-1,1][+!!false] === -1
一個更可怕的版本(使用三元):
var x = boolean ? 1 : -1;
或&&
和||
濫用:
var x = (boolean && 1) || -1;
謝謝!其實我正在瀏覽一個插件代碼,無論這條線看起來多麼噁心,對我來說都是有意義的。 – 2013-03-18 07:22:40
它正試圖從首先選擇一個元素陣列,基於一個變量:
[-1,1][INDEX BASED ON BOOLEAN VALUE]
的代碼等同於:
var myArr = [-1,1];
var selected = null;
if(boolean === false){
selected = myArr[0];
}
else {
selected = myArr[1];
}
釋:
[+!!boolean]
將返回0或1基於布爾值,否定之否定已經做了所有falsy值轉換像false,空數組,未定義,空對象爲布爾值false,並且truthy值爲布爾值true。 在他們面前把一個+
類型轉換它們成一個整數,從而使得有效的索引0或1,爲對targent陣列[-1,1]
第一比特創建具有兩個值的數組:
[-1,1]
第二位確保「布爾」,實際上是通過執行雙反轉的布爾值:
!!boolean == boolean
的加運算符用於這個布爾轉變成一個數,其中true => 1
和false => 0
。
最終,這個數字用於選擇該數組中的兩個值之一,即該表達式將「true」變爲1,將「false」變爲-1。
然而,這可能會有點更可讀:
boolean ? 1 : -1;
太少了! – slebetman 2013-03-18 07:05:03
表達[-1,1]
是包含值-1
和1
陣列。第二組括號從數組中取出一個值。例如,如果x
是一個數組,則x[0]
獲取第一個元素。如果我們寫y = [-1,1][0]
,這是一樣的如下:
var x = [-1,1];
y = x[0];
所以,現在怎麼樣+!!boolean
? 那麼,!
將值轉換爲布爾值,如果它不是「falsy」。如果是真的,則應用!
再將其轉換爲true
,如果它是虛假的,則應用false
。 (我推薦this google search關於truthy和falsy的條款)
最後,+
(正數)運算符將其轉換爲數字。將其想象爲與-
(負數)運算符相反。所以+true
轉換爲1
和+false
轉換爲-1
。
如果你把它的擴展形式,並把它寫成一個函數,這將是它(在我看來):
function(value){
var output_values = [ -1, 1 ]
, boolean = !!value
, index = +boolean
;
return output_values[ index ];
}
- 1. Python - 如何評估以下表達式?
- 2. 評估JavaScript表達式
- 3. 如何評估JavaScript表達式?
- 4. JavaScript如何評估語句表達式?
- 5. 如何評估表達式?
- 6. 評估表達式
- 7. 如何在沒有eval()的jQuery中評估以下表達式?
- 8. 在javascript中的表達式評估
- 9. Javascript無法評估表達式
- 10. 用於布爾表達式評估的Javascript評估
- 11. 以下JavaScript語句如何評估?
- 12. 如何評估樹中的表達式?
- 13. 如何評估這些C表達式?
- 14. Angular如何評估表達式?
- 15. 如何評估ExpressionVisitor中的表達式?
- 16. 如何評估這些表達式?
- 17. Python如何評估這個表達式?
- 18. 如何評估Handlebars表達式?
- 19. C#如何評估lambda表達式?
- 20. 如何評估MathML表達式?
- 21. 如何在Emacs的Haskell模式下評估單個表達式?
- 22. 調試表達式評估
- 23. 表達式樹評估
- 24. Xtext評估表達式
- 25. 評估數學表達式
- 26. 表達式評估順序
- 27. 表達式無法評估
- 28. 內聯表達式評估
- 29. 評估集合表達式
- 30. 評估前綴表達式
你在哪裏找到這樣的代碼??? – tjameson 2013-03-18 07:05:22