原文链接(点击跳转)

第一:not defined

演示代码:

  1.  
    <span style="font-size:12px;"><span style="font-family:Microsoft YaHei;"><script type="text/javascript">
  2.  
    alert(a);
  3.  
    </script></span></span>

执行结果:报错并提示:Uncaught ReferenceError: a is not defined,如图:

个人理解:not defined可以翻译为 未定义的。上面代码中的a没有被定义。所以会报错并提示not defined。

第二:undefined(js的数据类型之一)

演示代码:

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a;
  3.  
    alert(a);
  4.  
    </script></span>

或者

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a=undefined;
  3.  
    alert(a);
  4.  
    </script></span>

或者

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a={};
  3.  
    alert(a);
  4.  
    </script></span></span>
     
    第三种被博友指出错误,这里应该是:
    1.  
      <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
    2.  
      alert(typeof b);
    3.  
      </script></span></span>

执行结果:上面三段代码执行结果一样:不会报错,会打印出undefined,如图:

个人理解:上面出现undefined的三种情况,

第一是变量被声明了,但没有赋值;

第二是手工赋值为undefined,undefined只是一个值;

第三是一个不存在的对象成员为undefined。

注意:undefined除了手工赋值之外,其他情况都可以翻译成:不明确的,也就是不知道用来干嘛的,表示缺少值,就是某个地方应该有一个值,但是还没有初始化。undefined 的优点在于正常使用有此值的变量不会抛出异常。

第三:null

演示代码:

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a=document.getElementById("main");
  3.  
    alert(a);
  4.  
    </script></span>

执行结果:不会报错,会打印出null,如图:

个人理解:上面的代码中如果实际上没有id为main的元素,a则是null,所以null是真正不存在的东西。另外null是一个只有一个值的特殊类型。表示一个空对象引用,用typeof检测返回是object。第二种的undefined是派生自null,所以有undefined==null。

第四:NaN

演示代码:

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a;
  3.  
    alert(a*2);
  4.  
    </script></span>

执行结果:不会报错,会打印出NaN,如图:

个人理解:NaN是"Not a Number " 的简写,从字面上看为不是数字的意思,当运算无法返回正确的数值时,就会返回NaN值。也可以理解一下W3C给出的定义和用法:NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

null是一种特殊的object;NaN是一种特殊的number。

【 补充扩展 

深入谈谈undefined与null,以下内容部分参考自网络。

大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null。这是为什么?

在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。

  1.  
    <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.  
    var a=undefined;
  3.  
    var a=null;
  4.  
    </script></span>

《Speaking JavaScript》这本书中有讲到上面的这个问题: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表示"缺少值",就是此处应该有一个值,但是还没有初始化。

本篇文章就总结到这里。最后,由于时间仓促,资质有限,文中要是有表述不准确的地方还望见谅,也欢迎指正。

--------------------- 本文来自 键盘上的草根舞者 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xjun0812/article/details/49444771?utm_source=copy

【转】javascript中not defined、undefined、null以及NaN的区别的更多相关文章

  1. JavaScript中调皮的undefined

    JavaScript中调皮的undefined 在JavaScript中undefined只是一个标识符,不是关键字,这个很不靠谱的标识符还不能像其他符号一样随意使用,一方面是需要它的原始值保持不变, ...

  2. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  3. JavaScript中querySelector()和getElementById()(getXXXByXX)的区别

    在日常开发中,使用JavaScript获取元素的时候,最常用的方法就是document.getElementById(getXXXByXX)方法.但是最近发现有很多地方使用的是querySelecto ...

  4. javascript 中not defined 和undefined有什么区别

    概念上的解释:undefined是javascript语言中定义的五个原始类中的一个,换句话说,undefined并不是程序报错,而是程序允许的一个值.not defined是javascript在运 ...

  5. javascript中typeof、undefined 和 null

    typeof 是运算符,注意不是函数,是运算符,其作用,是考察变量究竟是什么类型.或曰,是变量是否定义或是否初始化的照妖镜.返回值是字符串. undefined 表示一个对象没有被定义或者没有被初始化 ...

  6. JavaScript中的 typeof,null,和undefined

    typeof操作符 null 在JavaScript中null表示“什么都没有”. null是一个只有一个值的特殊类型.表示一个空对象引用. typeof null; 返回的是object 可以将nu ...

  7. Javascript中类型: undefined, number ,string ,object ,boolean

    var a1; var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var ...

  8. JavaScript的undefined与null、NaN的区别

    Javascript的数据类型 在JavaScript中,有三种住数据类型.两种复合数据类型和两种特殊数据类型. 1.主数据类型(基元数据类型) 字符串 String数据类型: 字符串值是一个由零个或 ...

  9. 了解undefined、null、NaN的区别

    1.常规的解释,null是个对象,表示空值,undefined也是个对象,表示没有定义 2.详细分析 null 书上的解释(Javascript权威指南),Javascript的关键词null是一种特 ...

随机推荐

  1. KEIL的多工程多目标

    https://blog.csdn.net/ybhuangfugui/article/details/51655502 https://mp.weixin.qq.com/s/CSUa4zegzz8JW ...

  2. Quadtrees UVA - 297

    题目链接:https://vjudge.net/problem/UVA-297 题目大意:如上图所示,可以用一个四分树来表示一个黑白图像,方法是用根节点表示整副图像,然后把行列各等分两等分,按照图中的 ...

  3. Zookeeper分布式集群部署

    ZooKeeper 是一个针对大型分布式系统的可靠协调系统:它提供的功能包括:配置维护.名字服务.分布式同步.组服务等: 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的 ...

  4. selinux下修改sshd端口号

    21 如果已开selinux,修改sshd配置文件  # vim /etc/ssh/sshd_config中的端口号后 重启SSH服务  # systemctl restart sshd.servic ...

  5. pta5-9 Huffman Codes (30分)

    5-9 Huffman Codes   (30分) In 1953, David A. Huffman published his paper "A Method for the Const ...

  6. Qt 学习(4)

    Qt UI 文件机制 使用 Qt 设计界面程序时,若界面是静态的,可以借助 Qt Designer 进行所见即所得的界面设计.设计好界面后,在界面类中对 ui 对象进行操作非常方便. QtCreato ...

  7. linux命令strings

    linux命令strings,其man信息如下:strings(1)                                        GNU Development Tools      ...

  8. [巩固C#] 三、依赖注入是什么?

    阅读目录   接口 在说依赖注入之前,先了解下什么是接口. 我们在学编程的时候都知道,接口的相关规则:(来源百度百科) 1. 接口是一个引用类型,通过接口可以实现多重继承. 2. C#中接口的成员不能 ...

  9. Navicat连接Oracle数据库报错ORA-28547解决方法

    先说明下我机器的环境: 1.Win10 - 64bit 2.Navicat Premium_11.2.7  - 64bit 3.未安装Oracle数据库(包括Client也未安装) 解决方法: 1.下 ...

  10. idea 插件描述(转)

    提供些idea插件的干货.干货.干货! 如何安装idea plug,方法如下图:如果安装不了考虑下是否代理问题: 1,maven helper 以前查看maven依赖都比较麻烦,需要用命令maven ...