2014-03-29 77 views
0

我正在寫一個使用switch語句的腳本。當我聲明變量時,它們具有默認的布爾值true,是正確的?那麼,在switch語句中使用它並不那麼重要。默認情況下,JavaScript變量的布爾值是什麼?

這裏是JavaScript,我有:http://codepen.io/anon/pen/IDLqd/

基本上,我試圖做的是問,他們更喜歡基於那進入一個window.prompt的數據是什麼類型的列表樣式用戶() 方法。如果他們輸入1,2或3,他們將根據提示中的指示獲得一個列表。但是,如果它們沒有輸入一個有效的整數,則變量validInput的布爾值爲false。

從這裏開始,運行if語句來檢查validInput變量是否具有布爾值true,如果是,則將多個變量的值輸出到屏幕,如果不是,則輸出文本說「無效的選擇「。

爲什麼代碼將if語句中的validInput值識別爲false?如果在提示窗口中輸入了不同的值,則只賦值false。爲了使這個程序正常運行,我必須在每個開關情況下顯式地將validInput值定義爲true。

這是爲什麼?有人可以解釋嗎?

謝謝! Aaron

+3

已聲明但未設置的變量默認爲'undefined',即「falsey」,即'undefined == false','undefined!= true',但實際上不是false,即undefined!== false, 'undefined!== true'。 – Dave

+0

是不是因爲在你的情況下執行將轉到默認設置validinput爲false,因爲它沒有事先初始化? – pj013

+0

@Dave:我明白你在說什麼,所以從某種意義上說,它可以被認爲是空的,null被認爲是「假的」。 undefined和null有什麼區別?在用於諸如我所擁有的語句之前,總是定義變量總是一個好習慣嗎? –

回答

3

Javascript是一種動態語言,沒有什麼像默認布爾值

當你定義一個變量沒有值時,它的默認值總是undefined

var variable; // variable is undefined 

所以你要設置的值

var variable = true; 
// or 
var variable = false; 

如果你想切換這個布爾值,您可以執行以下操作:

variable = !variable; 
+0

謝謝你,我完全明白你在說什麼,但我不明白你最後一行,變量!=變量。你爲什麼要切換這個值?與僅僅定義它相反呢?難道這不會造成某種永無止境的錯誤? –

+0

+1。這是對的。 – Zafar

+1

@AaronBrewer這只是一個改變布爾值的例子。這可以在應用程序的任何地方完成,例如改變一些國旗的狀態。 – friedi

2

您檢查是否輸入是有效的與

if (validInput == true) { 
    // Your code 
} 

這樣做的較爲常見的方法是

if (validInput) { 
    // Your code 
} 

什麼是這兩者之間的區別?

首先檢查是否validInput等於true - 什麼都沒做(當然,幾乎沒有別的 - 你正在使用==而不是===,有時可有因爲JavaScript的類型轉換算法令人驚訝的結果,但是這另一個問題)。

要理解第二個,您需要了解JavaScript的「真實性」概念。如果你將一個值放入if語句的條件中,那麼javascript決定它是「真y」還是「false-y」,並相應地執行。

true是truthy,因爲是任何非零數字,任何非空字符串和任何對象。其他的事情是錯誤的,包括false0,"",nullundefined

最後這些可能是最相關的你,因爲變量是undefined,直到你設置它們。

+0

非常感謝你爲這James_pic!我很欣賞答案! :) –

+1

只是爲了給出一個類型轉換瘋狂的例子:如果'validInput'碰巧是一個字符串,那麼'validInput == true'只有在validInput ==='1''while validInput '只要'validInput!=='''是真的。 – Robert

相關問題