2015-04-08 59 views
1

嗨我只是通過JS插件(dropdown.js)的來源會和整個下面的代碼行傳來:運算符優先級與三元條件和邏輯與運營商在JavaScript

return $parent && $parent.length ? $parent : $this.parent() 

我不能要完全掌握上面的行,我理解邏輯和(& &)和三元條件運算符(... ? ... : ...),但我似乎無法理解它們在上面的示例中如何交互。

現在,如果我的return語句前加上一個console.log

console.log($parent && $parent.length ? $parent : $this.parent()); 

我得到:

Object { 0: <li.dropdown.open>, length: 1, prevObject: Object, context: <a.dropdown-toggle>, selector: ".parent()" } 

這的確是$this.parent()

此外,$parent在我的情況計算爲false

因此,這些都是樂高作品我有,有人可以把它放在地方我,給我的是如何工作的清晰圖像:

return $parent && $parent.length ? $parent : $this.parent() 

謝謝。


*請注意,這個問題的預編輯的版本有一個不正確的標題,並沒有解釋什麼是真正的問題是,直到一個看着它足夠的呵護,所以請不要downvote任何答案下面是可能似乎談「的短路」的地方這個問題(運算符優先級)的實際課題爲尋找外的話題唯一着想,不小心

回答

3

到JavaScript的operator precedence由於,您發佈的表達式等價於:

return ($parent && $parent.length) ? $parent : $this.parent(); 

這是由於&&運營商?:之前被評估。另外,您也可以使用if else重寫表達:

if ($parent && $parent.length) 
    return $parent; 
else 
    return $this.parent(); 
0
return ($parent && $parent.length) ? $parent : $this.parent() 

讀它像。這兩個條件都必須是真實的。在JS,一個& &操作數將盡快返回false作爲條件爲假

0

如果$parent解析爲「truthy」的值,也是如此$parent.length(這意味着在這種情況下,它不爲0),則它將返回值$parent

如果$parent爲假(所以很可能爲空或未定義),或者父項的長度爲0,則返回$this.parent()

0

在JavaScript中,特別是在條件語句,下面是真

if($parent) //checking whether the $parent variable has a value 

你張貼的條件語句如下排序的東西也就是說

如果$父母不爲空/未定義和$ parent.length不爲空/未定義,然後返回$父,否則返回$ this.parent();

讓我們看一下這句話再次

return $parent && $parent.length ? $parent : $this.parent(); 

首先是三元操作

$parent && $parent.length 

短路運營商在這裏工作的條件,因爲如果$ parent爲null /未定義,它不會評估$ parent.length(這將拋出一個javascript異常)。如果不爲null,則評估$ parent.length是否爲空/未定義。

相同的代碼可被寫爲(使用 '空' 僅出於簡潔)

if($parent != null && $parent.length !=null) { 
    return $parent; 
} else { 
    return $this.parent(); 
} 
+0

我看'如果($父)'是「檢查$父truthy或falsy」的方式。 –

1

在這裏,既$parent$this是JQuery的對象。該生產線$parent && $parent.length ? $parent : $this.parent()相當於:

if($parent && $parent.length) { 
    return $parent; 
} 
return $this.parent(); 

所以$parent && $parent.length實際上評價爲:如果$parent$parent.lengthnullundefined0false(falsy值),然後返回$parent,否則返回$this.parent()