javascript 的null和undefined

null 和 undefined 。
這兩者表現極爲相似

console.log(null==undefined);//true

但是不少地方還是有些不同

null 和 undefined在現代JS語義裏面是有明確區別的:
null 表示一個值被定義了,定義爲“空值”;
undefined 表示根本不存在定義。
所以設置一個值爲 null 是合理的,如
objA.valueA = null;
但設置一個值爲 undefined 是不合理的,如
objA.valueA = undefined; 。 應該直接使用 delete objA.valueA; 任何一個存在引用的變量值爲undefined都是一件錯誤的事情。
這樣判斷一個值是否存在,就可以用
objA.valueA === undefined 。 不應使用 null 因爲 undefined == null,而 null 表示該值定義爲空值。
這個語義在JSON規範中被強化,這個標準中不存在 undefined 這個類型,但存在表示空值的 null 。在一些使用廣泛的庫(比如jQuery)中的深度拷貝函數會忽略 undefined 而不會忽略 null ,也是針對這個語義的理解。

自然在使用中還是有不少不同之處
console.log(5+undefined);//NAN
consol.log(5+null);//5 。 自然 使用number()函數強制轉換時,得到的結果也是不同的

除此之外還有什麼不同之處?可不僅僅是這樣子。


<span id="test" data-belong="hah"></span>

$("#test").attr("data-belong",undefined);//沒有發生任何改變 data-belong 的值還是 "hah"
$("#test").attr('data-belong',null);// 審查元素,我們會發現 ,data-belong這個屬性值都沒有了。

如果一個值沒有被定義,那麼它的值就是undefined ,自然根據js重複定義的概念
var str="hah";
var str=undefined;//第二次定義,這一句實際上等於  var str;
這種情況
var str="hah";
var str;//會直接跳過不執行。那上一種表示方法就能理解了。
從這裏 ,$("#test").attr("data-belong",undefined);  這一句沒有執行任何操作,也就解釋通了。
然後再來看一下
$("#test").attr("data-belong",null);
//顯然這和$("#test").attr("data-belong",""); 是不同的。
這就遇到了一個難題 ,到底該如何顯示一個屬性爲null 的屬性值 。js的處理方式,是不顯示 ,由於這個沒有任何意義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章