typeof 是运算符,注意不是函数,是运算符,其作用,是考察变量究竟是什么类型。或曰,是变量是否定义或是否初始化的照妖镜。返回值是字符串。

undefined 表示一个对象没有被定义或者没有被初始化。

null 表示一个尚未存在的对象的占位符。

测试一,变量没有定义的时候,只能使用 typeof

    <input type="button" id="btnTest" οnclick="Test()" value="测试" /><script type="text/javascript">function Test() {alert(i == null);               //报错alert(i == undefined);          //报错alert(typeof i == "undefined"); //true
        }</script>

测试二,变量有定义,但未初始化,typeof,undefined,null都可以使用

   <script type="text/javascript">function Test() {var i;alert(i == null);               //truealert(i == undefined);          //truealert(typeof i == "undefined"); //truei = 0;alert(i == null);               //falsealert(i == undefined);          //falsealert(typeof i == "undefined"); //false
        }</script>

测试三,函数参数跟变量类似

、没有参数

    <input type="button" id="btnTest" οnclick="Test()" value="测试" /><script type="text/javascript">function Test(i) {alert(i == null);               //truealert(i == undefined);          //truealert(typeof i == "undefined"); //true
        }</script>

2、有参数

    <input type="button" id="btnTest" οnclick="Test(0)" value="测试" /><script type="text/javascript">function Test(i) {alert(i == null);               //falsealert(i == undefined);          //falsealert(typeof i == "undefined"); //false
        }</script>

如果你对undefined和null这两种类型经常分辨不清,那么恭喜,因为你会找到很多的知音。其实要理解这两种类型, 首先要知道它们设计的初衷:

undefined:表示一个对象没有被定义或者没有被初始化。

null:表示一个尚未存在的对象的占位符。

有意思的是undefined类型是从null派生来的。所以它们是相等的:
alert(null == undefined); //输出  “true”

对于所有的JavaScript开发人员,最常碰到的就是对象不存在错误。正如在C#中的空引用错误一样。很多程序员习惯的以为JavaScript中的if会自动将undefined和null对象转化为false,比如:

var oTemp = null;
if(oTemp){}; //false
if(undefined){}; //false

上面的语句都是正确的,if中的条件都是false。但是如果注释掉oTemp的声明部分,情况就不同了:

//var oTemp = null; 注释掉变量声明语句
if(oTemp){}; //error

会抛出错误。但是无论是否声明过oTemp对象,使用typeof运算符获取到的都是undefined并且不会报错:

//var oTemp1; 注释掉变量声明语句
alert(typeof oTemp1); //输出 “undefined”
var oTemp2;
alert(typeof oTemp2); //输出 “undefined”

所以如果在程序中使用一个可能没有定义过的变量,并且没有使用typeof做判断,那么就会出现脚本错误。而如果是此变量是null或者没有初始化的undefined对象,可以通过if或者“==”来判断。切记,未声明的对象只能使用typeof运算符来判断!

正因为如此,typeof经常和undefined变量一起使用。typeof运算符返回的都是一个字符串,而时常程序员会当作类型来使用。是否你也犯过如下的错误呢?

//var oTemp; 注释掉变量声明语句
if(typeof oTemp == undefined ){…}; //false

这里if将永远是false。要时刻铭记typeof返回的是字符串,应该使用字符串比较:

//var oTemp; 注释掉变量声明语句
if(typeof oTemp ==”undefined”){…};//true

下面是typeof运算符对各类型的返回结果:

w undefined:“undefined”
w null:“object”
w string:“string”
w number:“number”
w boolean:“Boolean”
w function:“function”
w object:“object”

结果只有null类型让人吃惊。null类型返回object,这其实是JavaScript最初实现的一个错误,然后被ECMAScript沿用 了,也就成为了现在的标准。所以需要将null类型理解为“对象的占位符”,就可以解释这一矛盾,虽然这只是一中 “辩解”。对于代码编写者一定要时刻警惕这个“语言特性”,因为:

alert(typeof null == “null”);//输出 false

永远为false。

还要提醒,一个没有返回值的function(或者直接return返回)实际上返回的是undefined。

function voidMethod()
{
return;
}
alert(voidMethod()); //输出 "undefined"

转自 http://www.cnblogs.com/ttltry-air/archive/2011/03/24/1993433.html

javascript中typeof、undefined 和 null相关推荐

  1. java Null==undefined_javascript中的undefined和null有什么区别

    原标题:javascript中的undefined和null有什么区别 java中的undefined和null的区别有:类型不同前者返回的是未定义值后者是对象:转换原始类型方式不同前者是不支持转换后 ...

  2. JavaScript中typeof的用法

    JavaScript中typeof知多少? typeof运算符介 绍: typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型. 你 ...

  3. js判断null_JavaScript中的undefined和null

    大家都知道,undefined和null都是JavaScript中基本数据类型之一.先来看看两者的定义: undefined:未定义的值,表示一个变量的原始状态,而非人为操作的结果,常出现在以下情况: ...

  4. 关于JavaScript中typeof的用法

    一.typeof的作用 在JavaScript中,变量未经声明就使用,系统是会报错的.但是,typeof却是js中有且仅有的一个特例. typeof的作用就是用来区分数据类型的,下面先说说typeof ...

  5. Javascript中的0,false,null,undefined,空字符串对比

    先看一段代码: <script type="text/javascript">alert(typeof (false) === "boolean") ...

  6. 区分JavaScript中的undefined,null和NaN

    区分underfined,null和NaN 先看看下面语句的运行结果: 1: var a; 2: alert(a); //显示"undefined" 3: alert(typeof ...

  7. javascript中的undefined,null,,0和false的云集

    在各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,bool ...

  8. html js布尔值怎么定义,JavaScript基本类型值-Undefined、Null、Boolean

    大致介绍 ECMAScript中有5中简单的数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String. Undefined Undefined时全局变量 ...

  9. javascript中NaN属性、null对象、Number对象、Object对象

    NaN属性: 表示不是一个数字,是全局对象的属性,其初始值为NaN <script>console.log(NaN == NaN); //false</script> null ...

  10. javascript中的undefined 和 not defined

    经研究发现,两者之间有很大的区别,不知从英语讲,这两者都有啥区别,研究结果如下 测试os:ubuntu 测试浏览器:chrome 测试案例1 console.log(a) 报错 ReferenceEr ...

最新文章

  1. Visual C++ 时尚编程百例019(串行化)
  2. 数据挖掘与机器学习介绍
  3. 搭建web服务器,发布站点
  4. 【深度学习】图像特征提取与通道数问题(基于U型网络)
  5. Spark RDD并行度与分区设置
  6. go语言连接redis(已测试)
  7. oracle重启数据库一般要多久,优化Oracle停机时间及数据库恢复
  8. HDU2795 Billboard
  9. [设计模式] ------ 简单工厂模式
  10. Kubernetes 稳定性保障手册(极简版)
  11. 无法从计算机中删除,【求助】Windows无法从该家庭组中删除你的计算机
  12. java 多线程基础, 我觉得还是有必要看看的
  13. AZURE-百万像素定焦镜头
  14. python怎么把两个文件合并工具_python开发目录合并小工具 PathMerge
  15. j2ee中的2什么意思
  16. php emoji base64,PHP处理字符中的emoji表情
  17. 关于android属性persistent的问题
  18. Django models常用Field介绍以及常见错误解决
  19. 二阶常微分方程(ODE)的打靶法(Shooting method),有限差分基础(python)
  20. 安卓的SoundPool(音效池)播放声音(及具体参数解析)

热门文章

  1. 支持语言locale
  2. 可浮动的在线qq咨询客服代码
  3. 韩国被申遗 (转自果壳)
  4. 判断浏览器是否为IE
  5. 在Silverlight 5 项目中创建单元测试项目
  6. Serv-U权限提升再提升--记一次虚拟主机入侵
  7. APICS与AX的Master Planning(一)--Phantom bill of Material 虚项
  8. C#两种创建快捷方式的方法
  9. java循环语句_Java十四天零基础入门-Java for循环语句
  10. Java常用排序算法