javascript-void keyword_OpenStack, 云计算等杂项讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  OpenStack, 云计算等杂项讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2976 | 回复: 0   主题: javascript-void keyword        上一篇   下一篇 
shanshan.jiang
注册用户
等级:少尉
经验:382
发帖:12
精华:0
注册:1970-1-1
状态:离线
发送短消息息给shanshan.jiang 加好友    发送短消息息给shanshan.jiang 发消息
发表于: IP:您无权察看 2015-8-19 11:46:06 | [全部帖] [楼主帖] 楼主

写在前面

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

北京联动北方科技有限公司

breakdoinstanceoftypeofcaseelsenewvarcatchfinallyreturnvoidcontinueforswitchwhiledebuggerfunctionthiswithdefaultifthrowdeleteintry


北京联动北方科技有限公司

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) { returnfunction (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.1MDN



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论