2013-05-02 45 views
2

我已經閱讀了很多JavaScript教程,我相信我知道許多事情,直到現在。所以我認爲用這種語言寫一些腳本是個好主意。我的問題是,我不知道這行確實:這行代碼包含'||'在JavaScript中呢?

var b=Number(ls.autofarm)||0,g,h,i,d,j; 

我知道這行的基礎知識,該變量的名稱爲b,它具有數(Is.autofarm)的值|| 0,g,h,i,j,但爲什麼「||」正在使用?如果有人能向我解釋這條線是什麼,那將會很棒。

+1

是什麼讓你相信這是b的正確值? – 2013-05-02 01:29:21

+1

我建議花一些時間理解[邏輯運算符](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators#Logical_operators)。 – Marty 2013-05-02 01:30:44

+0

[Javascript中的「options = options || {}」是什麼意思?](http://stackoverflow.com/questions/2851404/what-does-options-options-mean-in-javascript)和潛在的重複[許多,許多,許多其他](http://stackoverflow.com/search?q= [javascript] +%22 ||%22)。 – 2013-05-02 02:47:16

回答

3

||在JavaScript中經常用作提供默認值的方式。第一個非錯誤值或找到的最後一個值「勝出」。

例如

var a = "foo"; 
var b = null; 
var c = a || 2; // c == "foo". a was non-false, so we use that 
var d = b || 2; // d == 2. b was false (null, 0, "" are all false), so we moved along 
你的情況

// b == Number(ls.autofarm), unless that's false/null/undefined. Then we use 0 
var b = Number(ls.autofarm) || 0, 
g,h,i,d,j;  // a bunch of other variables 
+2

由於技術上'null'和其他一些值不是'false'而是'falsey',所以最好使用術語「falsey」或某物而不是「false」。 – 2013-05-02 01:35:22

+0

你的回答是錯誤的。如果Number(ls.autofarm)是虛假的,變量'b'將導致'j'。這是因爲逗號運算符總是返回__last__表達式(即'j'不是'0')。改變這一點,我會刪除downvote。 – 2013-05-02 01:46:43

+2

不,在這種情況下,逗號終止變量定義。從Chrome控制檯: > J = 「Ĵ在這裏」 「Ĵ在這裏」 > LS = { 'autofarm':假} 對象{autofarm:假} >變種B =號碼(ls.autofarm) || 0,G,H,I,d,J; undefined > b > j 「j在這裏」 – 2013-05-02 01:52:40

0

這是有關部分(其它字母都只是變量聲明):

var b=Number(ls.autofarm)||0

如果Number(ls.autofarm)評估爲true然後它會被分配到b。如果它的計算結果爲false,則0將被分配給b

+1

相反,如果'Number(ls.autofarm)'是「truthy」,它將被分配給b。 – numbers1311407 2013-05-02 01:33:08

+0

謝謝大家!我明白了。 – user2341330 2013-05-02 08:47:25

2

var b=Number(ls.autofarm)||0,g,h,i,d,j; 

如果它可以幫助你理解可以分成兩個部分。

var b = Number(ls.autofarm)||0; 
var g,h,i,d,j; 

第二行是空變量的聲明,而第一行是用值聲明b。如果||左邊的值是虛假的,使用右邊的值。在這種情況下,如果Number(ls.autofarm)爲false,則b將爲0.

+1

這是一個很好的例子,其中原始片段是可維護性優化的情況。我希望它來自一些最小化的腳本! – 2013-05-02 01:37:27

+0

當然,這也是一個很好的觀點,可以提醒人們注意編程* *不要編寫這樣的代碼。 :D儘管在學習語法如何工作的規則方面,這是一個很酷的練習。 – jmort253 2013-05-02 01:59:46

1

var b=Number(ls.autofarm)||0,g,h,i,d,j;

在我看來,b取決於ls.autofarm的值,或者只是0(零)。

其他g,h,i,d,j;類似於

var b=Number(ls.autofarm)||0; 
var g; 
var h; 
var i; 
var d; 
var j; 
0

||是邏輯OR運算符的變量減速,至極也是在JavaScript中falsey coalscing操作者,至極意味着它的計算結果爲表達式的左側,如果該值不虛假的,否則它評估到右側的價值。

Falsey值是:false空字符串''0nullundefinedNaN

||經常被用來提供缺省值。

function (someArg) { 
    someArg = someArg || 'test'; // 'test' if someArg is falsey 
} 

當有多個||運營商,這裏是它的計算:

var a = 0 || '' || true || false; 
  1. 它首先對0 || '',至極返回''
  2. 然後評估'' || true,至極返回true
  3. 此時,表達式將不會被進一步評估和true將被退回。

請注意,多個變量可以用一個var語句聲明和初始化,就像在你的例子中一樣。

var b = Number(ls.autofarm) || 0, g, h, i, d, j; 

上述初始化bNumber(ls.autofarm) || 0並聲明ghidj變量。

相關問題