1. 程式人生 > >關於undefined,null,NaN,以及引用值的一點小記

關於undefined,null,NaN,以及引用值的一點小記

在JavaScript中,undefined以及null同樣是表示空值(沒有實際意義)。

    undefined == null;

事實上,上面這段程式碼的返回結果也是true,然後他們倆有什麼區別嗎,首先是語義上面的區別,undefind在JavaScript中表示的是已經聲明瞭,但是沒有賦值,相當於是對只是被聲明瞭的狀態的表示,是的沒錯,我更願意把他理解為一種狀態,而null就更像是一個值了,他表示的就是一個空,就是啥都沒有,實際上也是一種狀態(至少我是這麼理解的)。
NaN也是一個比較有趣的值。

在執行自比較之中:NaN,也只有NaN,比較之中不等於它自己。

我的理解是他是一種表示錯誤的值,他的存在就是為了表示JavaScript中數值的運算錯誤。就像當於是在遇到數值運算的錯誤時,不終止程式的執行(對,我們的JavaScript真真的是個老好人),只是把這個錯誤作為一個值丟擲來
最後再講一下子引用值,和原始值不同,我們是沒有辦法直接訪問到他的,我們只能通過一個指標來訪問引用值,引用值型別有Funtion

Object Array這三種,在引用值的比較,他並沒有去找到指標所指的原始值然後在進行比較,而是比較這個指標(怎麼這次就不去找指標所指的值了呢)。
所以即使是有時候我們把兩個引用值來進行比較,即使這兩個值是相等的,但是應用的指標不是同一個,所以比較的時候還是還反悔false.

    obj1 = {};
    obj2 = {};
    if(obj1 === obj2) {
        console.log("true");
    }
    else {
        console.log("false");
    }

這裡的結果看起來應該是true對吧,但是他的實際結果是false

,原因就是因為,這裡的比較不是比較的那個儲存空間所儲存的值,而是比較的那個儲存空間的位置(也就是那個指標)。
但是吧對於{} === {}的返回值卻是false,這裡還是有一點以後。。。