簡體   English   中英

沒有初始值的JavaScript變量在一種情況下返回null,而在另一種情況下未定義

[英]JavaScript variable with no initial value returns null in one case and undefined in another

因此,我正在學習JavaScript並測試了以下代碼:

var name;
console.log( name );

返回null

var c;
console.log( c ); 

返回undefined

為什么是這樣?

文檔狀態: A variable declared using the var statement with no initial value specified has the value undefined.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Declaring_variables

任何對官方文檔的引用都很棒!

如果在瀏覽器中執行此操作,這是因為name 已經存在於瀏覽器環境中(這是窗口的名稱)。 因此var name是no-op。 但請參閱下文, null位讓我感到驚訝。

在JavaScript中,全局變量實際上是全局對象的屬性。 全局對象是值this在全球范圍內的代碼*。 在瀏覽器中,全局對象是該頁面的瀏覽器的window對象,因此它具有為Window對象定義的任何屬性。 name (另一個是window ,這是全局對象具有的屬性,該屬性具有對全局對象的引用,因此,即使不是在全局范圍內,也可以使用window來引用它。)實際上,瀏覽器上的全局對象非常擁擠,因為瀏覽器傾倒在它的屬性對於具有任何元素id (屬性名是id ,該值是對元素的引用),有formsall在某些瀏覽器, document ,和一堆其他的東西。

在瀏覽器之外,全局對象沒有指向它的任何自動屬性(很好,除非環境添加了一個),並且它上沒有瀏覽器特定的東西(但可能與您所處的任何環境都有特定的東西)在)。


*除非你有"use strict"在你的腳本,這使它在嚴格模式,在這種情況下的頂部thisundefined


關於您在第一個示例中獲得null作為輸出:我發現這非常令人驚訝; 我本來希望"" (一個空白字符串),或者,如果有的話,當然是窗口的名稱。 必須在某處某處為name分配null"null" (在我嘗試過的各種瀏覽器中,都可以將其設置為字符串"null" [Chrome,Firefox,IE8,IE11])。 您可以在此頁面上嘗試(jsFiddle等為窗口提供名稱運行的窗口,因此在此示例中無法使用它們):

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<script>
  (function() {
    "use strict";

    display("[before] typeof name: " + typeof name);
    display("[before] name: " + name);

    display("Doing <code>name = null;</code>");
    name = null; // Gets coerced to string "null"

    display("[after] typeof name: " + typeof name);
    display("[after] name: " + name);

    function display(msg) {
      var p = document.createElement('p');
      p.innerHTML = String(msg);
      document.body.appendChild(p);
    }
  })();
</script>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM