javascript-void keyword

写在前面

ECMA-262定义了ECMAScript所支持的关键字(keyword),关键字不能用作ECMAScript程序的标识符(Indetifiers)。ECMA-262标准定义了以下关键字:

break do instanceof typeof
case else new var
catch finally return void
continue for switch while
debugger function this with
default if throw delete
in try

void

根据ECMA-262定义,void是javascript中的26个关键字之一,那么在javascript中void有什么用,和其他语言中的void有什么不一样呢。根据ECMA官方标准定义,void是一个一元操作符并返回undefined,无论表达式后面是什么。

在ECMA-262规范中有如下描述:

void后可以是任意表达式(UnaryExpression),返回值有且只有undefined:

注:不要写成void 1 + 1等这种形式,由于void比+优先级高,那就变成了(void 1) + 1

基本用法

1、void 0

依据ECMA-262规范,void运算符返回并且只返回undefined,由于undefined在ECMA-262官方标准中既不是关键字也不是保留字,它可以作为变量名被赋值,因此undefined有可能作为变量被覆盖,所有使用void 0代替undefined就成了常用的方法。

function joke() {
var undefined = "hello world";
console.log(undefined); //会输出"hello world"
} var property = function (key) {
return function (obj) {
return obj == null ? void 0 : obj[key];
};
};

2、javascript:void(0)

可以用javascript:void(0),来阻止链接默认的跳转行为,下面是MDN文档的示例:

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

<a href="javascript:void(alert('hello word!'))">Click me!</a>

注:无论void(UnaryExpression)延伸出多少种用法,其本质就在于执行UnaryExpression并返回undefined这一点。

疑问

回到void的ECAM-262官方标准定义处,既然void的返回值永远是undefined,那么为什么还需要调用GetVale(expr)。其实void设计来实现执行后边的表达式并忽略表达式结果返回undefined,如果表达式的结果是一个Reference,并没有进行取值,而取值这个过程有可能有副作用(side-effect),所以要多一个GetValue步骤。

参考

ECMAScript 5.1
MDN

javascript-void keyword的更多相关文章

  1. [Javascript] Avoid Accidental Returns of New State by using the void Keyword

    For example we have a 'useState' function, which takes a state and a function to update the state: c ...

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

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

  3. html 空链接 href="#"与href="javascript:void(0)"的区别

    #包含了一个位置信息 默认的锚是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#但跳动到了页首 而javascrip ...

  4. a href=#与 a href=javascript:void(0) 的区别

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  5. href使用 javascript:;与javascript:void(0)防跳到顶部

    有时候我们在编写js过程中,需要触发事件而不需要返回值,那么就可能需要这样的写法   href=”#”,包含了一个位置信息.默认的锚是#top,也就是网页的上端,当连续快速点击此链接时会导致浏览器巨慢 ...

  6. javascript:void(0)

    这是不是一个设计缺陷呢 void(0)这种用法巧妙利用void关键字的特性返回undefined(且没有副作用).因为不是关键字,比如直接使用undefined,内容可能被改写. 再来看为啥使用0,而 ...

  7. <a href=”#”>与 <a href=”javascript:void(0)” 的区别

    <a href=”#”>中的“#”其实是锚点的意思,默认为#top,所以当页面比较长的时候,使用这种方式会让页面刷新到页首(页面的最上部) javascript:void(0)其实是一个死 ...

  8. 超级链接a中javascript:void(0)弹出另外一个框问题

    转字:http://my.oschina.net/castusz/blog/68186 结果在IE.Firefox.Chrome都是先执行的onclick事件,在项目中我们尽量不要同时使用这两种方式. ...

  9. javascript:void(0) ,设置a链接无效,设置点击a页面不刷新,不跳动

    http://www.cnblogs.com/opper/archive/2009/01/12/1373971.html 我想使用过ajax的都常见这样的代码: <a href="ja ...

  10. IE6与 javascript:void(0)

    遇到过几次这种问题,现在总结一下. 代码: <a onclick="window.location.href='http://www.google.com'" href=&q ...

随机推荐

  1. Android 字体库的使用

    开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView  的 typeface 属性支持 "Sans","serif&qu ...

  2. 2018-11-19-win10-uwp-使用-Matrix3DProjection-进行-3d-投影

    title author date CreateTime categories win10 uwp 使用 Matrix3DProjection 进行 3d 投影 lindexi 2018-11-19 ...

  3. C#的选择语句练习(二)

    1.输入a,b,c三个数,计算一元二次方程ax²+bx+c的根:若a=0,则不是一元二次方程:△=b²-4ac,根的计算公式为-b±√b²-4ac/2a:若△=b²-4ac>0,则方程有两个不一 ...

  4. H3C 帧中继地址映射

  5. Python--day21--包

    包: 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高 ...

  6. H3C PPP会话流程

  7. java 集合遍历输出方式

    Iterator:迭代输出 一旦操作集合的遍历输出,首选Iterator接口; ListIterator:Iterator子接口,专门输出List中的元素; Enumeration:古老的输出方式,迭 ...

  8. Vue之webpack的entry和output

    一.文件结构 二.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  9. php 变量名前加一个下划线含义

    https://segmentfault.com/q/1010000006467833 一个下划线是私有变量以及私有方法两个下划线是PHP内置变量. 以下划线开头,表示为类的私有成员. 这只是个不成文 ...

  10. H3C 静态黑洞路由应用