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

最新文章

  1. 使用WMI和性能计数器监控远程服务器权限设置
  2. iOS开发--录音简单实现
  3. Leetcode#103 Binary Tree Zigzag Level Order Traversal
  4. 在VisualStudio 2012上使用MVC3出现错误的解决办法
  5. RabbitMQ安装和配置
  6. Fun with layers
  7. .NET中可空值类型实现原理
  8. python之数据结构链表实现方式
  9. PC响应式、固宽布局思想
  10. Node.js + gulp 合并静态页模版,文件更新自动热重载。浏览器可预览
  11. 15-TypeScript策略模式
  12. UOJ_274_[清华集训2016]温暖会指引我们前行_LCT
  13. Android 音视频深入 十六 FFmpeg 推流手机摄像头,实现直播 (附源码下载)
  14. C# -- 使用XmlDocument或XDocument创建xml文件
  15. nginx-redirect配置
  16. 使用grep排除空行和注释行
  17. python变量进阶(可变不可变,局部变量和全局变量)
  18. matplotlib绘图pie
  19. C语言学习笔记 (010) - 编写strcpy函数
  20. Java:使用DOM4j来实现读写XML文件中的属性和元素

热门文章

  1. @51nod - 1196/1197/1198@ 字符串的数量
  2. MyBatis-使用XML或注解的简单实例
  3. poj 1066 Treasure Hunt (Geometry + BFS)
  4. H3C RARP
  5. 图表echarts折线图,柱状图,饼状图
  6. centos 磁盘挂载
  7. HDU 5463
  8. gradle 生成 pom,引用mybatis-plus源代码到自己的工程中
  9. 2019-4-29-C#-从-short-转-byte-方法
  10. Linux 内核 usb_control_msg 接口