2010-09-27 46 views

回答

4

如果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

-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:45:11

+0

如果'myInput.value = null' – BenAlabaster 2010-09-27 13:45:52

+0

* value *不必爲短路或踢入而未定義,則它也是相同的,它可以是* undefined *,* NaN *,* null *,* 0 *,* false *或*「」*。 – 2010-09-27 13:45:55

0

它具有默認值的方法0的情況下,myInput.value爲空(未定義)

+2

null和undefined是不同的,因此爲null或undefined。你的答案措辭的方式意味着null和undefined是相同的,而他們不是。 – BenAlabaster 2010-09-27 13:42:12

+0

或者一個空字符串「」或其他任何等於==比較中的假的字符串。 – Residuum 2010-09-27 13:43:23

+0

-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:43:38

0

它設置myValue到的myInput0的值,如果該值myInput是任何」在JavaScript中被認爲是錯誤的(特別是undefinednull)。訣竅是||運營商的短路行爲。當你評估a||ba爲真,||運算符返回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 
+0

或null ....... – BenAlabaster 2010-09-27 13:40:42

+0

-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:46:04

+0

這樣比較好。但StackOverflow不會讓我改變我的投票,除非你再次編輯出於某種原因。 – 2010-09-27 13:51:55

2

||往往是calle d默認的操作員。它可以讓你給出一個默認值,如果別的東西是虛假的。因此,如果myInput.valueundefined,例如,myValue將被分配0

+0

或者myInput.value爲空 – BenAlabaster 2010-09-27 13:41:23

+0

Hurray,有人終於得到了答案。 +1 – 2010-09-27 13:47:12

-1

這意味着如果myInput.value沒有被定義,myValue將被設置爲0。與OR相同。

+0

-1。如果'myInput.value'是一個包含'undefined','null','0','false',空字符串''「'等的falsy值,它將'myValue'設置爲'0'。否則,它將'myValue'設置爲'myInput.value'的值。 – 2010-09-27 13:47:38

0

JavaScript有一個定義從左到右的評估順序。所以,如果你喜歡寫東西

如果永遠不會發生(方法()||方法2()){...}

方法2()如果()方法返回true,因爲真正的OR任何事情總會是真的。

這與您在Javascript中給出的示例相同。

如果「myinput.value」的計算結果不真實,則會分配此值,否則將爲每個falsish值(null,0,「」)分配0。

+0

儘管您的陳述是真實的,但在此您不能認爲解釋'var myValue'是布爾值。在這個例子中,javascript解釋了myInput.Value的存在,如果沒有值,則返回0. – BenAlabaster 2010-09-27 13:44:33

+0

如果myinput.value爲true,那麼myValue只會是布爾值。 ||的解釋myinput.value將被視爲真實運算符根據正常的javascript規則解釋null,0,空字符串和NaN爲false。 – fforw 2010-09-27 13:54:04

0

許多語言中的操作符都包含一種稱爲快捷方式的優化:如果左側評估爲真值,則不需要評估右側。真||任何東西==真實。這通常用於提供默認值,如您的示例代碼中所示。如果左手邊myInput.value的計算結果爲true,則整個表達式將返回該值。否則,整個表達式將返回右邊的值0.

請注意,這也取決於||。運算符返回原始值而不是布爾值true或false。對於邏輯測試,每一邊都被評估爲真或假,而不是表達式的返回值。 (a){(a){(a,b){ if(a){return a; } return b; }

1

,因爲JavaScript解釋器的構建方式,它可以解釋值true或false

  • 未定義,空,假的值的某些類甚至存在(或不存在) ,0,空字符串,NaN可以解釋爲假
  • 存在非假值可以解釋爲非假,因此在很多情況下爲真;不要混淆非虛假和真實。它們有時會被鬆散地解釋爲相同,但不是false包含所有不被解釋爲false的東西,而true則更具體。

這樣:

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

+0

這個答案有點困惑。除空字符串之外的所有字符串都強制爲「true」。空字符串強制爲「false」。因此,布爾(「你好,我們這裏有一天的地獄」)是'true'。 – 2010-09-27 16:51:45

+0

@Daniel Cassidy這就是我寫的內容......將價值強迫爲真並不是事實。他們不是一樣的。價值是不正確的,但被強迫解釋爲這是我的觀點。這與'真實'不一樣。我想我的措辭並不像我想象的那麼清楚。我試圖消除由於等號和等號之間的差異而導致的混淆......如果這是有道理的。 – BenAlabaster 2010-09-27 17:02:05

+0

是的,我知道你的意思,我毫不懷疑你知道你的意思:)。問題在於你對「解釋」的使用有點模糊。在一段中,你說「」嗨,我們這裏有一天的地獄「」不能被解釋爲「真實的」「(這意味着它強制」真實「,但它不一樣作爲'true',這是正確的)。接下來你會說「如果myInput.value'沒有包含任何JavaScript可以解釋爲」true「的東西(意思是這些東西不會強制爲真,這與您使用的方式相反在前一段中「解釋」)。 – 2010-09-27 17:10:44

0

MyValue將等於myInput.value0如果之前的值可視爲假。

該值可視爲空字符串(''),零(0)等任何說在這個代碼TruemyInput.value == False