最近上网出现了一个奇怪的现象。浏览百度贴吧的时候。出现undefined。那么这个undefined到底是什么意思呢?
undefined是一个特殊值。通常用于指示变量尚未赋值。对未定义值的引用返回特殊值。其实大多数计算机语言。只有一个表示"无"的值。比如。C语言的NULL。Java语言的null。Python语言的None。Ruby语言的nil。
但有一种语言是例外的。JavaScript语言居然有两个表示"无"的值:undefined和null。这是为什么?undefined 和null有什么区别呢?
一。相似性
在JavaScript中。将一个变量赋值为undefined或null。实话说。二者几乎没区别。
var a = undefined;
var a = null;
上面代码中。a变量分别被赋值为undefined和null。这两种写法效果几乎是一样的。
undefined和null在if语句中。都会被自动转为false。相等运算符甚至直接报告两者相等。
if (!undefined)
console.log('undefined is false');
// undefined is false
if (!null)
console.log('null is false');
// null is false
undefined == null
// true
上面代码说明。两者的行为是何等相似!
既然undefined和null的含义与用法都差不多。为什么要同时设置两个这样的值?
二。真相揭秘
原来。这与JavaScript的历史有关。1995年JavaScript诞生时。最初像Java一样。只设置了null作为表示"无"的值。但是。JavaScript的设计者Brendan Eich。觉得这样做还不够。有两个原因。
首先。null像在Java里一样。被当成一个对象。但是。JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类。Brendan Eich觉得表示"无"的值最好不是对象。
其次。JavaScript的最初版本没有包括错误处理机制。发生数据类型不匹配时。往往是自动转换类型或者默默地失败。Brendan Eich觉得。如果null自动转为0。很不容易发现错误。
因此。Brendan Eich又设计了一个undefined。
三。目前的用法
但是。上面这样的区分。在实践中很快就被证明不可行。目前。null和undefined基本是同义的。只有一些细微的差别。
null表示"没有对象"。即该处不应该有值。典型用法是:
(1) 作为函数的参数。表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示"缺少值"。就是此处应该有一个值。但是还没有定义。典型用法是:
(1)变量被声明了。但没有赋值时。就等于undefined。
(2) 调用函数时。应该提供的参数没有提供。该参数等于undefined。
(3)对象没有赋值的属性。该属性的值为undefined。
(4)函数没有返回值时。默认返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
本文地址:https://gpu.xuandashi.com/27516.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!