博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中typeof、undefined 和 null
阅读量:6464 次
发布时间:2019-06-23

本文共 1797 字,大约阅读时间需要 5 分钟。

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

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

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

 

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

    

 

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

 

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

、没有参数

    

2、有参数

    

 

 

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

undefined:表示一个对象没有被定义或者没有被初始化。 null:表示一个尚未存在的对象的占位符。 有意思的是undefined类型是从null派生来的。所以它们是相等的:
alert(null == undefined); //输出  “true”

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

var oTemp = null;if(oTemp){}; //falseif(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
你可能感兴趣的文章
python学习之老男孩python全栈第九期_day009之初始函数初窥
查看>>
第二次作业 随机数四则运算
查看>>
AESEncryption Aes 加密
查看>>
关于定位中left和right,top和bottom的权重问题
查看>>
分析bugreport
查看>>
腾讯UED 漂亮的提示信息
查看>>
[转]fedora亮度控制
查看>>
初始化指针
查看>>
相册加密APP技术支持
查看>>
CentOS6.5_python2.7.3下virt-manager无法启动
查看>>
Day1:Python编写三级菜单
查看>>
JavaScript学习笔记
查看>>
爬虫实践-拉勾网测试经理JD抓取【2018.05.15】
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
查看>>
第一次冲刺--个人工作总结04
查看>>
hdu 5645 DZY Loves Balls
查看>>
Probabilistic Graphical Models-Template Models
查看>>
PAT 1110 Complete Binary Tree[判断完全二叉树]
查看>>
年终报告
查看>>
【Android】日常开发android.jar文件中十五个重要的包概述
查看>>