javascript 的null和undefined

来源:互联网 发布:qq游戏大厅hd网络异常 编辑:程序博客网 时间:2024/04/27 16:07

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的处理方式,是不显示 ,由于这个没有任何意义。
0 1