1、undefined既是JavaScript中的原始數據類型之一,也是一個原始值數據

對於有編程經驗的朋友來説,undefined是JavaScript的原始數據類型之一這一點毋庸置疑,沒有什麼可以贅述的,因為ECMAScript規範中就將undefined定義為原始數據類型之一。

undefined也是一個原始值數據,我的理解是,當一個聲明瞭但是未初始化的變量會默認賦值為字符串“undefined”

<script>
        let num;
        console.log(num)//undefined
    </script>

2、undefined是全局對象上的一個屬性

當我們直接輸出全局window對象時,就可以找到undefined的存在,當然也可以直接輸出window.undefined得到undefined

<script>
       console.log(window);
       console.log(window.undefined);//undefined
 </script>

3、undefined不可刪,不可重新定義,不可枚舉

(1)undefined不可刪除

以下操作雖然使用delete操作想將undefined刪除,但是達不到效果,使用delete操作後,再次輸出undefined依然可行

<script>
       delete window.undefined;
       console.log(undefined);//undefined
    </script>

(2)undefined不可重新定義

以下操作會報錯

<script>
        Object.defineProperty(window,'undefined',{
            enumerable:true,
            writable:true,
            configurable:true
        });
    </script>

(3)undefined不可枚舉

既然undefined是全局對象window中的一個屬性,那麼是否可以通過循環遍歷的方式將undefined從window對象中遍歷出來呢?結果很遺憾,不可以。

以下代碼不會輸出任何內容

<script>
        for(k in window){
           if(k===undefined){
               console.log(key)//不會輸出內容
           }
       }
    </script>

4、undefined不是JavaScript的關鍵字和保留字,

undefined不是JavaScript的關鍵字和保留字,在全局作用域中不重新賦值,但是在函數作用域中可以重新賦值,但是不建議這麼做,不建議將undefined作為變量、對象、函數等名稱使用,

在全局作用域中,undefined不可以重新賦值,即使重新賦值了,但是無效,在全局中輸出的依然是undefined

<script>
      window.undefined=1;
      console.log(window.undefined);//undefined
  </script>

但是在局部作用域中,可以將undefined作為變量名重新賦值,但是不建議這麼做。

以下fun函數執行輸出結果為2

<script>
    function fun(){
        let undefined=2;
        console.log(undefined)//2
    }
    fun();
  </script>
<script>
    function fun(){
        let undefined=2;
        console.log(undefined)//2
    }
    fun();
  </script>