这几天在github的源码中看到了很多 result == void 0 的判断,起了好奇心,这句话是啥意思?

为啥经常出现在代码中,于是马上行动起来,Google一搜第一条就是stackoverflow的回答,看完后恍然大悟,写下这篇心得分享给大家。

语法

void expression

MDN的描述

能向期望一个表达式的值是 undefined 的地方插入会产生副作用的表达式。也就是为了避免产生某种副作用,将一个为 undefined 的值转换为 void 表达式

作用

避免undefined的重定义

由于undefined不是个关键字,es5以前可以将变量名undefined赋予一个变量,这时将会改变undefined的作用,在很多源码库中都使用了void(0)代替undefined。这个bug被支持es5及更高版本的浏览器修复了,IE8中仍存在这个问题,eg:

alert(undefined);   // undefined
var undefined = "various";
alert(undefined); // various

节省代码库的体积

void 0undefined更简短,对于浏览器来说这能减少很多字节。

可作为一个函数表达式

在使用立即执行的函数表达式时,可以利用void运算符让JavaScript引擎把一个函数识别成函数表达式而不是函数声明(语句)。

void function iife() {
var bar = function () {};
var baz = function () {}; var foo = function () {
bar();
baz();
}; foo();
}();

JavaScript URLs

当用户点击一个以JavaScript:URL时,浏览器对冒号后面的代码求值,然后把求值的结果显示在页面上,这时页面基本上是一大片空白,这通常不是我们想要的。只有当冒号后面的代码是undefined时,浏览器才不会做这件事,我们经常会用void运算符来实现这个需求。像下面这样:

<a href="javascript:void(0);">
Click here to do something
</a>

参考链接:what-does-void-0-mean

JS - What does `void 0` mean?的更多相关文章

  1. 转:js中javascript:void(0) 真正含义

    from:http://www.jb51.net/article/71532.htm 在Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. 我想使用过ajax的都常 ...

  2. JS的javascript:void(0)用法

    javascript:void(0)用法如下: <a href="javascript:void(0)"></a> // 执行js函数,0表示不执行函数. ...

  3. js中 javascript:void(0) 用法详解

    点击链接不做任何事情: <a href="#" onclick="return false">test</a> <a href=& ...

  4. JS中javascript:void(0)真正含义

    对于下面的代码,其中void(0)的含义是什么? <a href="javascript:Test();void(0);">hello</a> 其实,Jav ...

  5. 为什么js中要用void 0 代替undefined

    这个是Backbone.js中的一句源码 if (callback !== void 0 && 'context' in opts && opts.context == ...

  6. js & void() & void(0)

    js & void() & void(0) https://www.runoob.com/js/js-void.html void() <a href="javascr ...

  7. JS魔法堂:从void 0 === undefined说起

    一.前言 当使用coffeescript书写如下代码时 name = person?.name 会被预编译为 ; ,那么void 0到底是什么意思呢?运行得知void 0===undefined为tr ...

  8. js javascript:void(0) 真正含义

    我想使用过ajax的都常见这样的代码:<a href="javascript:doTest2();void(0);">here</a>但这儿的void(0) ...

  9. js 里面的那些节省字节的写法 a|0 void 0等等

    //取整 parseInt(a,10); Math.floor(a); ~~a; //节省之后的写法 a|0; //节省之后的写法 //四舍五入 Math.round(a); a+.5|0; //节省 ...

随机推荐

  1. lPC1788的串口通讯

    #ifndef __DEBUGSERIAL_H_ #define __DEBUGSERIAL_H_ #include "sys.h" #include "stdio.h& ...

  2. 像51一样操作STM32的IO(转)

    源:像51一样操作STM32的IO //-------------------------------------------------------------------------------- ...

  3. ajax--2017年1月15日

    听说点六下就能复制了? ajax: 一般处理程序(数据接口):ashx 跨语言传递数据:xml: 结构不清晰 代码量比较大 查找起来比较费事 非面向对象结构 json: 结构清晰 代码量相对较小 面向 ...

  4. SD卡初始化以及命令详解

    SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的 ...

  5. iOS强制切换横屏、竖屏

    切换横竖屏最直接的方式是调用device的setOrientation方法.但是从sdk3.0以后,这个方法转为似有API,如果要上AppStore的话,要慎用! if ([[UIDevice cur ...

  6. Xcode各版本官方下载

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ Xcode 66.4: http ...

  7. selenium IE 浏览器驱动下载地方

    download: http://selenium-release.storage.googleapis.com/index.html

  8. myeclipse的常用快捷键

    创建一个类 Alt+Shift+N,C,输入Demo,回车 创建类属性 按3次下方向键,回车,输入String name;,回车 创建构造器 Alt+Shift+S,O,回车 创建getter/set ...

  9. java基础——1.内部类

    内部类创建 从外部类的非静态方法之外(?=静态方法)的任意位置创建某个内部类的对象,要加入外部类的名字,OuterClassName.InnerClassName public class Parce ...

  10. bzoj3932

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1326  Solved: 480[Submit][Sta ...