2012-03-29 18 views
1

我有一些例子

target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') 

,但我不明白它是如何工作(

如果我使用的console.log()

console.log(target, e.preventDefault(), (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 

我得到

#collapseTwo undefined #collapseTwo 

是的,我明白,e.preventDefault()返回結果 - 「垃圾」......但爲什麼e.preventDefault()與||一起使用運營商?

它的作品如何?

回答

1

這將執行以下操作: 在一些評論中重新答案完全不同(在某種意義上:)) 所以它做什麼,如果點擊的元素dataTarget有一個值(在這種情況下,假定該元素是不是具有導航點擊事件取消的錨點),而是將該值用於導航,否則該元素必須是錨點,必須先取消錨點,然後使用其href屬性的值。

簡潔? :)

我對它原來讀是: 如果事件目標具有dataTarget屬性,然後單擊事件泡沫被取消,如果clicktarget有那麼指定href屬性的瀏覽器被定向到那裏。這裏的概念是,從左到右的評估邏輯與實際的副作用方法執行相結合。

這種鏈式寫作雖然簡潔但並不真正有益。 preventDefault是因爲這種方式對它的調用被鏈接在一起,並且不需要代碼塊。

0

該||如果左邊的是TRUE,那麼操作符不會評估表達式的右邊。

+0

ok,e.preventDefault()永遠不會返回結果true,爲什麼它在這個表達式中使用?錯誤的樣式代碼? – Vitaliy 2012-03-29 20:42:03

+0

是的,其實這就是爲什麼href然後檢查,如果數據目標有一個值,這意味着它不會有href,所以沒有必要取消。哎呀。 – 2012-03-29 21:59:08