void操作符
void有如下作用:
- 通过采用
void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。(undefined在javascript中不是保留字) - 
填充
<a>的href确保点击时不会产生页面跳转; 填充<image>的src,确保不会向服务器发出垃圾请求。 
规范是这么说的
在ECMAScript 262规范,有如下描述:
The void Operator
The production UnaryExpression : void UnaryExpression is evaluated as follows:
- Let expr be the result of evaluating UnaryExpression.
 - Call GetValue(expr).
 - Return undefined.
 NOTE: GetValue must be called even though its value is not used because it may have observable side-effects.
搬译一下:
void操作符
产生式 UnaryExpression : void UnaryExpression 按如下流程解释:
- 令 expr 为解释执行UnaryExpression的结果。
 - 调用 GetValue(expr).
 - 返回 undefined.
 注意:GetValue一定要调用,即使它的值不会被用到,但是这个表达式可能会有副作用(side-effects)。
GetValue的作用:
var happiness = 10;
var girl = {
    get whenMarry() {
        happiness--;
        return 1/0; //Infinity
    },
    get happiness() {
        return happiness;
    }
};
console.log(girl.whenMarry); //调用了whenMarry的get方法console.log(girl.happiness); // 9
void girl.whenMarry; //调用了whenMarry的get方法console.log(girl.happiness); // 8
delete girl.whenMarry; //没有调用whenMarry的get方法console.log(girl.happiness); //还是8
上述代码定义了一个大龄文艺女青年,每被问到什么时候结婚呀(whenMarry),happiness都会减1。从执行情况可以看出,无论是普通访问girl.whenMarry,还是void girl.whenMarry都会使她的happiness--。而如果把void换成delete操作符写成delete girl.whenMarry,她的happiness就不会减了,因为delete操作符不会对girl.whenMarry求值。
                    
                
                
            
        
浙公网安备 33010602011771号