zoukankan      html  css  js  c++  java
  • javascript-void keyword

    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

     

  • 相关阅读:
    httprunner 3.x--参数化parameters(参数和值多对一,多对多,一对一等),csv文件
    httprunner 3.x--variables变量和声明(变量和值一一对应)
    httprunner 3.x 带参数接口测试(get方法)
    appium安装(windows7)
    httprunner 3运行报错AttributeError: module 'allure' has no attribute 'severity_level'
    jmespath用法
    httprunner3.x 测试用例应用/变量传递(测试用例编写)
    Python框架之Tornado(一)
    Python之Web框架
    Python 装饰器(进阶篇)
  • 原文地址:https://www.cnblogs.com/oxdavidsun/p/4741416.html
Copyright © 2011-2022 走看看