2017-01-14 56 views
0

我一直在寫一些關於隨機數生成的代碼,並且我會將用戶的名字添加到腳本生成的句子中。爲什麼「null」能夠工作,但不能爲空?

用戶用提示輸入他們的答案。我想知道如何檢查null,所以我用堆棧溢出的多個源給出的答案來測試它。但是,它不適用於null。奇怪的是,當null作爲字符串輸入時,它確實工作:"null"。我一遍又一遍地讀了null不是一個字符串,那麼爲什麼會這樣?
我的測試代碼如下:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Check</title> 
    <script> 
     var name = prompt("What's up?"); 
     function check() { 
     if (name === null) { 
      document.write("null"); 
     } 
     } 
    </script> 
    </head> 
    <body id="body" onload="check()"> 
    </body> 
</html> 
+1

我現在看到的問題...更改名稱' '到別的東西,因爲'name'是一個窗口屬性,會把你搞砸! –

回答

2

當有人類型的輸入,它是由腳本收到一個字符串。因此,如果有人輸入null,它將轉換爲「null」,即值爲null的字符串。所以當你試圖評估它的值爲null它不起作用。但是,如果您評估它爲字符串「null」,它將匹配。

編輯:如果你不想讓用戶輸入null或任何其他惡意值,創建這樣的字符串列表並檢查他們。將它們當作字符串值對待

當您按下取消按鈕時,函數也會執行,但由於您取消操作,所以名稱的值被設置爲「null」。這就是提示功能的工作原理。 https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

+0

要添加到poushy的答案,您需要檢查字符串是否爲空而不是'null' - https://jsfiddle.net/orrLqtfm/。 –

+1

你仍然應該檢查'null'來測試是否按下了'cancel'按鈕 –

+0

如果你不想讓用戶輸入null或任何其他惡意值,創建一個這樣的字符串列表並檢查它們。將它們視爲字符串值。 – poushy

0

的問題是純粹的變量名的選擇...即name

與(幾乎)任何其他變量名稱將工作「預期」

在全球範圍內var name = ...本質上是代碼同window.name = ...

現在,window.name被定義爲窗口的名字......這通常是一個空字符串。如果你的window.open一個窗口,給人一種名稱,window.name將在新窗口中

現在值,分配到null實際上window.name將導致window.name == 'null',因爲window.name不能是一個非字符串類型。事實上給予任何非字符串值window.name將導致window.name具有「的ToString()」值

嘗試

window.name = true; // window.name will be the string "true"; 
window.name = {key: "value"}; // window.name will be the string "[object Object]";