今天看prototype源码时发现有一段代码很奇怪 switch(o) { case null: return NULL_TYPE; case (void 0): return UNDEFINED_TYPE; } 为什么第二个case的值是(void 0)? 从这段代码可以看出,它是对null和undefined进行判断。 第二个case的判断条件就是undefined。那么它为什么使用void 0而不是直观的undefined呢? 学习过javascript的同学知道undefined是一个全局属性,表示未定义或定义了没有赋值。 void是一个一元运算符,不管传入什么参数都会返回undefined。 到网上google一下,发现void操作符是在ECMAScript v1中定义的,而undefined是在ECMAScript v5中定义的。 好了,我们知道这个用法是为了兼容老版本的浏览器。那么还有其它的区别吗? 我们知道undefined不是javascript的保留字,所以我们可以用undefined作为变量名。这时,我们定义的undefined就会影响到使用undefined作为判断的地方。 那么,真是这样吗? 我的测试代码是这样的: undefined=123; console.log(undefined); console.log(void 0); 结果在chrome17和firefox10里面打印的结果是2个undefined,但是在ie9里面打印的是123和undefined。 我只能说chrome17和firefox10很智能。 同时,我去测试了一下这两种方式的性能差别。 我的测试代码是这样的: var j=10000000,res; var t1=new Date(); for(var i=0;i<j;i++){ res=undefined; } var t11=new Date(); console.log(t11.getTime()-t1.getTime()); var t2=new Date(); for(var i=0;i<j;i++){ res=void 0; } var t22=new Date(); console.log(t22.getTime()-t2.getTime()); 发现它们性能没多大区别。但是我却发现chrome17的时间在140ms左右,firefox10在28ms,ie9在440ms。chrome和firefox的结果让我诧异。 最后,总结一下: 使用void 0代替undefined是为了兼容性以及预防代码的不规范(自己修改undefined的值)。
相关推荐
主要介绍了javascript中的undefined和not defined区别,需要的朋友可以参考下
之前软件开发网发不过类似的文章JavaScript null和undefined区别分析JavaScript Undefined,Null类型和NaN值区别先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的...
在javascript中根据变量作用的范围不同分为局部变量和全局变量,直接定义的变量是全局变量,全局变量可以被所有的脚本访问;在函数中定义的变量是局部变量,局部变量只在函数内有效。 如果全局变量和局部变量使用...
下面解释javascript中属性的本质,因为undefined是一个属性,了解undefine的本质要用到属性的本质。 三、属性本质 对JavaScript来说,属性并非只是简单的名称和值,JavaScript用一组特征(attribute)来描述属性...
JavaScript 基础篇(一) 基础篇 Javascript:一、数据类型和值 javascript:允许使用3种基本类型数据——–数字、字符串、布尔值,此外还支持两种小数据类型null(空)和undefine(未定义). javascript:还支持符合...
作用域是一个变量和函数的作用范围,javascript中函数内声明的所有变量在函数体内始终是可见的,在javascript中有全局作用域和局部作用域,但是没有块级作用域,局部变量的优先级高于全局变量,通过几个示例来了解下...
主要是对JavaScript判断变量是否为undefined的两种写法区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
一、一元运算符 1、delete 运算符:删除对以前定义的对象属性或方法的引用。例如: var o=new Object; o.name=”superman”; alert(o.name); //输出 “superman” ... 2、void 运算符: 对任何值都返回undefine
JavaScript的变量提升有两种,用var声明的变量以及用function声明的变量。 用var声明的变量 我们先来看下面这段代码,a的值是多少 代码1 console.log(a); var a; 按照以往编程语言的思路来看,代码自上而下运行,...
C++中调用C文件中的函数会报undefined refrence to 如何解决.zip
通过js实现cookies 的增加删除修改,解决chrome读为 undefine 的问题
下面是选择题:官方地址是 http://perfectionkills.com/javascript-quiz/ 代码如下: 1. (function(){ return typeof arguments; })(); “object” “array” “arguments” “undefined” 2.... 1 null undefine
//#define MASTER //define:master undefine:slave #define FOSC 18432000L #define BAUD (256 - FOSC / 32 / 115200) typedef unsigned char BYTE; typedef unsigned int WORD; typedef unsigned long DWORD; sfr...
Laravel开发-laravel-breadcrumb 一个简单的面包屑生成器。
javascript一共有9种数据类型,分别是字符串 String、数值型 Number、布尔型 Boolean、未定义 Undefine、空值 Null、对象 Object、引用Refernce、列表型 List、完成型 Completion,我们今天首先来看看(字符串 ...
java环境变量配置工具,配置过程详细解释,java学习详细资料
只有6种 : 四种原始数据类型boolean , number, string , undefine, 其他object,function是对象 typeof,instanceof 直接看实例: var obj = null; console.info(typeof obj); //Object var arr = []; ...
redux-devtools.crx 版本 2.15.3 大小 5.6 MB 解决 使用安装redux.devTools后 Cannot read property 'state' of undefined 问题
在终端启动gedit命令或者vscode命令报错:gedit: symbol lookup error: /home/chujie/anaconda3/lib/libgobject-2.0.so.0: undefined symbol: g_date_copy 问题分析: 导致错误的原因应该是gedit依赖libgobject-2.0....
第一个为undefine是因为timer为参数,相当于声明了,但没有赋值,所以为undefined 第二个为NaN是因为undefined+1不是一个数字,所以