可能重複:
In Javascript, what does it mean when there is a logical operator in a variable declaration?請解釋「var myValue = myInput.value || 0;」我:)
過這個代碼在網上無意中發現,不知道它做什麼,不能夠與螢火找出要麼,我不能谷歌,因爲特殊字符...
var myValue = myInput.value || 0;
謝謝! :)
可能重複:
In Javascript, what does it mean when there is a logical operator in a variable declaration?請解釋「var myValue = myInput.value || 0;」我:)
過這個代碼在網上無意中發現,不知道它做什麼,不能夠與螢火找出要麼,我不能谷歌,因爲特殊字符...
var myValue = myInput.value || 0;
謝謝! :)
如果myInput.value
是不確定的(或其他falsy值),那麼0
默認值將被設置
一些例子...
myInput.value = undefined
var myValue = myInput.value || 0;
// myValue = 0
myInput.value = 10
var myValue = myInput.value || 0;
// myValue = 10
它具有默認值的方法0的情況下,myInput.value爲空(未定義)
null和undefined是不同的,因此爲null或undefined。你的答案措辭的方式意味着null和undefined是相同的,而他們不是。 – BenAlabaster 2010-09-27 13:42:12
或者一個空字符串「」或其他任何等於==比較中的假的字符串。 – Residuum 2010-09-27 13:43:23
-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:43:38
它設置myValue
到的myInput
或0
的值,如果該值myInput
是任何」在JavaScript中被認爲是錯誤的(特別是undefined
或null
)。訣竅是||
運營商的短路行爲。當你評估a||b
和a
爲真,||
運算符返回a
:
console.log('a'||'b'); // 'a'
當第一個參數是假的,||
操作返回第二個參數:
console.log(undefined||'b'); // 'b'
這也是很好的思考這個:
var foo = 0;
console.log('a'||foo++);
console.log(foo); // 0
console.log(undefined||foo++); // 0
console.log(foo); // 1
或null ....... – BenAlabaster 2010-09-27 13:40:42
-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:46:04
這樣比較好。但StackOverflow不會讓我改變我的投票,除非你再次編輯出於某種原因。 – 2010-09-27 13:51:55
||
往往是calle d默認的操作員。它可以讓你給出一個默認值,如果別的東西是虛假的。因此,如果myInput.value
是undefined
,例如,myValue
將被分配0
。
或者myInput.value爲空 – BenAlabaster 2010-09-27 13:41:23
Hurray,有人終於得到了答案。 +1 – 2010-09-27 13:47:12
這意味着如果myInput.value沒有被定義,myValue將被設置爲0。與OR相同。
-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:47:38
JavaScript有一個定義從左到右的評估順序。所以,如果你喜歡寫東西
如果永遠不會發生(方法()||方法2()){...}
方法2()如果()方法返回true,因爲真正的OR任何事情總會是真的。
這與您在Javascript中給出的示例相同。
如果「myinput.value」的計算結果不真實,則會分配此值,否則將爲每個falsish值(null,0,「」)分配0。
儘管您的陳述是真實的,但在此您不能認爲解釋'var myValue'是布爾值。在這個例子中,javascript解釋了myInput.Value的存在,如果沒有值,則返回0. – BenAlabaster 2010-09-27 13:44:33
如果myinput.value爲true,那麼myValue只會是布爾值。 ||的解釋myinput.value將被視爲真實運算符根據正常的javascript規則解釋null,0,空字符串和NaN爲false。 – fforw 2010-09-27 13:54:04
許多語言中的操作符都包含一種稱爲快捷方式的優化:如果左側評估爲真值,則不需要評估右側。真||任何東西==真實。這通常用於提供默認值,如您的示例代碼中所示。如果左手邊myInput.value的計算結果爲true,則整個表達式將返回該值。否則,整個表達式將返回右邊的值0.
請注意,這也取決於||。運算符返回原始值而不是布爾值true或false。對於邏輯測試,每一邊都被評估爲真或假,而不是表達式的返回值。 (a){(a){(a,b){ if(a){return a; } return b; }
,因爲JavaScript解釋器的構建方式,它可以解釋值true或false
這樣:
if (myMethod)
myMethod();
可用於運行前檢查myMethod的存在。
該||符號是一個短路OR語句。如果OR的第一部分是或可以被解釋爲非錯誤的,那麼聲明的該部分將被主持並且該值將被採用並用作myValue。如果javascript認爲語句的第一部分被解釋爲false,那麼OR的第二部分將被返回。
因此在聲明中:
var myValue = myInput.value || 0;
myvalue的會變成什麼myInput.value包含它是否包含任何JavaScript可以解釋爲不假。因此它可能包含"Hi, hell of a day we've got here!"
並且將返回到myValue。
當我說不是假的時候,我並不是嚴格意義上的真實,因爲「嗨,我們一天到來的地獄」並不[嚴格地說]被解釋爲真實的,而是被「強迫」成被這樣解釋。
如果myInput.value不包含JavaScript可能被強制解釋爲true的任何內容,那麼將返回0到myValue。
因此,在這種情況下,如果myInput.value是不確定的,空,假,0等等,那麼myValue = 0
這個答案有點困惑。除空字符串之外的所有字符串都強制爲「true」。空字符串強制爲「false」。因此,布爾(「你好,我們這裏有一天的地獄」)是'true'。 – 2010-09-27 16:51:45
@Daniel Cassidy這就是我寫的內容......將價值強迫爲真並不是事實。他們不是一樣的。價值是不正確的,但被強迫解釋爲這是我的觀點。這與'真實'不一樣。我想我的措辭並不像我想象的那麼清楚。我試圖消除由於等號和等號之間的差異而導致的混淆......如果這是有道理的。 – BenAlabaster 2010-09-27 17:02:05
是的,我知道你的意思,我毫不懷疑你知道你的意思:)。問題在於你對「解釋」的使用有點模糊。在一段中,你說「」嗨,我們這裏有一天的地獄「」不能被解釋爲「真實的」「(這意味着它強制」真實「,但它不一樣作爲'true',這是正確的)。接下來你會說「如果myInput.value'沒有包含任何JavaScript可以解釋爲」true「的東西(意思是這些東西不會強制爲真,這與您使用的方式相反在前一段中「解釋」)。 – 2010-09-27 17:10:44
MyValue
將等於myInput.value
或0
如果之前的值可視爲假。
該值可視爲空字符串(''
),零(0
)等任何說在這個代碼True
myInput.value == False
-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:45:11
如果'myInput.value = null' – BenAlabaster 2010-09-27 13:45:52
* value *不必爲短路或踢入而未定義,則它也是相同的,它可以是* undefined *,* NaN *,* null *,* 0 *,* false *或*「」*。 – 2010-09-27 13:45:55