这是我参与更文挑战的第4天,活动详情查看:更文挑战
第一:not defined
<script type="text/javascript">
alert(a);
</script>
执行结果:报错并提升:Uncaught ReferenceError: a is not defined
个人理解:not defined可以翻译为 未定义的。上面代码中的a没有被定义。所以会报错并提示not defined。
第二:undefined
<script type="text/javascript">
var a;
alert(a);
</script>
// 或者
<script type="text/javascript">
var a={};
alert(a);
</script>
// 或者
<script type="text/javascript">
var a=undefined;
alert(a);
</script>
执行结果:上面三段代码执行结果一样:不会报错,会打印出undefined,如下图:
个人理解:上面出现undefined的三种情况,
第一是变量被声明了,但没有赋值;
第二是一个不存在的对象成员为undefined;
第三是手工赋值为undefined,undefined只是一个值。
Tips:undefined除了手工赋值之外,其他情况都可以翻译成:不明确的,也就是不知道用来干嘛的,表示缺少值,就是某个地方应该有一个值,但是还没有初始化。undefined 的优点在于正常使用有此值的变量不会抛出异常。
第三:null
<script type="text/javascript">
var a = document.getElementById("main");
alert(a);
</script>
执行结果:执行结果:不会报错,会打印出null,如下图:
个人理解:上面的代码中如果实际上没有id为main的元素,a则是null,所以null是真正不存在的东西。另外null是一个只有一个值的特殊类型。表示一个空对象引用,用typeof检测返回是object。第二种的undefined是派生自null,所以有undefined==null。
第四:NaN
<script type="text/javascript">
var a;
alert(a*2);
</script>
执行结果:不会报错,会打印出NaN,如下图:
个人理解:NaN是"Not a Number " 的简写,从字面上看为不是数字的意思,当运算无法返回正确的数值时,就会返回NaN值。也可以理解一下W3C给出的定义和用法:NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
null是一种特殊的object;NaN是一种特殊的number。