2015-09-03 24 views
0

當我們爲變量賦值時,最好使用||。運營商還是?運營商?最佳實踐「OR」和「Ternary」運算符

例子:

OR

var x = window.scrollX || window.pageXOffset; 

三元

var x = "scrollX" in window ? window.scrollX : window.pageXOffset; 

什麼是最好的方法是什麼?

+3

如果'scrollX'爲0會發生什麼事,你使用的第一個版本? – Jite

+1

三元,總是:更具可讀性,更少「錯誤」傾向,請參閱http://programmers.stackexchange.com/questions/82593/javascript-ternary-operator-vs – Luca

回答

1

這兩者不等價。
在第一個版本中,您檢查scrollX值是否爲'。也就是說,如果它的undefined,false,null,0等等。
在第二個版本中,您檢查窗口對象是否具有scrollX屬性。

例如:
如果你使用的第一個和scrollX價值0,它將使用pageXOffset屬性值,而在兩個不同的版本,它會使用scrollX值。

試試這個控制檯:

var a = { x: 0, y: 1 }; 
var or = a.x || a.y; 
var tern = 'x' in a ? a.x : a.y; 

console.log('or: ' + or); 
console.log('tern: ' + tern); 
0
var x = window.scrollX || window.pageXOffset; 

上述方法有一些副作用。在這種情況下,JS中存在短路結構。無論window.scrollX需要什麼,總是會被接受。除非它是未定義的,否則x的所有結果都是window.scrollX