void 0 或者 undefined

Problem

在检查一个值是否为undefined的时候,你们是如果去测试的?

要是之前的我会这样子测试


 function isUndefined(obj){
   return obj === undefined;
}

但是最近在看《javascript框架设计》这本书的时候,他用了另外一种方法,我就有点纳闷了。


 function isUndefined(obj){
   return obj === void 0;
}

两者谁比较好点呢?如何比较呢?应该从它的适用性、浏览器兼容性来比较!然后我就在MDN找到void操作符的定义和undefined的说明,才知道《javascript框架设计》中的方法略胜一筹。为什么呢?下面来讲解

Description

void
The void operator evaluates the given expression and then returns undefined.也是就是说void是一个操作符,它总是返回的是undefined这个值
undefined
The global undefined property represents the value undefined.就是说undefined其实是一个全局变量,它的是就是代表着undefined。我们可以用window.hasOwnProperty("undefined");去测试,返回true就证明它是全局变量。既然它是全局变量的话,我们就可以修改它了,在修改一些特定变量方面ES3和ES5中是不一样的。ES3中每个变量都是可写可配置可遍历的,但是ES5设置一些API去设置变量的这些特性。我们可以在chrome(支持ES5)的控制台敲上一句这样子的代码Object.getOwnPropertyDescriptor(window,"undefined"),我们可以看见他打印出来的是Object
{value: undefined, writable: false, enumerable: false, configurable: false}
。可以看见在ES5中的undefined值是不能修改(即writable为false)的,但是在旧的浏览器比如IE7、8,你就可以修改undefined的值,导致你的isUndefined失去效果了。

Why void 0, specifically?

stackoverflow网站的一个问题有提到一定要用void 0吗?不能是void 1,void 10000,void "hello world" 或者其他吗?答案都是可以的,只是0给人的感觉就是简短、惯用.

Reference

undefined

void

What does void 0 mean?

void 0 或者 undefined,布布扣,bubuko.com

时间: 2024-10-08 19:35:12

void 0 或者 undefined的相关文章

[void 0]与[undefined]

今天刚开始学ts,看到TypeScript在处理函数的默认参数时,是先判断该参数是否存在(即是否是undefined),不存在的话则给它赋值.不过ts判断undefined并不是直接利用 target === undefined, 而是用void 0来替代undefined,这是为什么呢? 先来说结论: 是因为undefiend可能会被重写 我们得先来简单谈下undefined,它是标识符而非保留字,作为全局对象的一个属性,该属性的初始值表示基本数据类型值undefined,在ES5之前是可以给

JavaScript中void 0和undefined

众所周知,Undefined是JS语言中的7大基本类型之一,表示未定义,它的值只有一个,就是undefined.任何变量在赋值前都是undefined. 1 typeof Undefined //"undefined" 而在一些框架源码中,会出现一些这样的表达式: if (context === void 0) return func; function foo() { var a = arguments[0] !== (void 0 ) ? arguments[0] : 2; ret

javascript 中 void 0的含义及undefine于void 0区别

undefined是一个全局属性,表示未定义或定义了没有赋值. void是一个一元运算符,不管传入什么参数都会返回undefined.  void操作符是在ECMAScript v1中定义的,而undefined是在ECMAScript v5中定义的. 我们知道undefined不是javascript的保留字,所以我们可以用undefined作为变量名.这时,我们定义的 undefined就会影响到使用undefined作为判断的地方.看下面例子: 测试了主流浏览器IE7-IE11.opera

【JS基础】JavaScript中的void 0

众所周知,Undefined是JS语言中的7大基本类型之一,表示未定义,它的值只有一个,就是undefined.任何变量在赋值前都是undefined. 而在一些框架源码中,会出现一些这样的表达式: if (context === void 0) return func; function foo() { var a = arguments[0] !== (void 0 ) ? arguments[0] : 2; return a; } if (array == null) return voi

javascript void 0替换掉不靠谱的 undefined

标识符 undefined 并不能真正反映 "未定义", 因为undefined 并不是JavaScript 保留词 JavaScript 提供了 void 运算符,该运算符会对指定的表达式求值,并返回受信的 undefined: void expression  通过以下运算来获得 undefined,表达式为 0 时的运算开销最小:void 0或者void(0); 1.在 underscore 中,所有需要获得 undefined 地方,都通过 void 0 进行了替代. 2 .引

javascript中argument1 === void 0的意思

今天看代码时看到 if (argument1 === void 0 || typeof argument1 === 'object') { 啥意思? 概述 void 运算符会对它的操作数表达式进行求值,然后忽略掉求值的结果,直接返回 undefined. 语法 void expression 描述 我们经常会在一个期望得到 undefined 返回值的地方使用 void 运算符,这样就可以忽略掉它后面的表达式的真实返回值.我们只去利用那个表达式执行时的副作用. 经常会有人用 void(0) 或者

a标签的href="javascript:void(0)"和href="#"的区别

好文要推:a标签的href="javascript:void(0)"和href="#"的区别 张鑫旭这篇文章也挺风趣的,作为一个轻微代码洁癖的程序员,该纠结时就纠结:是习惯还是规范!?   疑问:为什么要使用href="javascript:void(0);"? a 标签要写href属性!~有了href属性,天然鼠标手型,以及可以被键盘focus以及focus时候回车模拟点击行为(支持回车点击和默认可以获取焦点). href="#&qu

href="javascript:void(0)"

自己亲自测了以下:<a href="javascript:void(0) " onclick="on(this)">链接</a>:先执行on函数,页面不动 <a href="#" onclick="on(this)">链接</a>:先执行on函数,回到顶部 <a href="https://www.baidu.com" onclick="on(

22.&quot;javascript:;&quot; 和 &quot;javascript:void(0)&quot; 有区别?

void 运算符会对给定的表达式进行求值,然后直接返回 undefined void 运算符通常只用于获取 undefined 的原始值,一般使用 void(0)(等同于 void 0).在上述情况中,也可以使用全局变量undefined 来代替(假定其仍是默认值). <script> console.log(void(console.log("OK"))); </script> 这段代码的运行结果为: OK undefined 一般我个人称 javascrip