美文网首页
void 0 与 undefined

void 0 与 undefined

作者: Kevin丶CK | 来源:发表于2019-06-04 09:44 被阅读0次

在看React的react-dom.js源码的时候,发现void 0,在很多地方用到。回忆起最初使用void 0的地方,是设置a标签的href是个死链接,及配置a标签的href=javascript:void(0);的方式防止a标签本身的链接跳转。

首先先了解一下void😊

void操作符

MDN中对void的说明:

void 运算符对给定的表达式进行求值,然后返回 undefined
这个运算符能向期望一个表达式的值是undefined的地方插入会产生副作用的表达式。
void 运算符通常只用于获取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情况中,也可以使用全局变量undefined 来代替(假定其仍是默认值)。

产生式 UnaryExpression : void UnaryExpression 按如下流程解释:

  • expr 为解释执行UnaryExpression的结果。
  • 调用 GetValue(expr)。(后面会有解释
  • 返回 undefined。

注意:GetValue一定要调用,即使它的值不会被用到,但是这个表达式可能会有副作用(side-effects)。
重点在于:无论void后的表达式是什么,void操作符都会返回undefined。

为什么要用void?

因为undefined在javascript中不是保留字。换言之,undefined可以被重写。
undefined 在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域中,还是可以被重写的。

function testFunc() {
    var undefined = "hello world";
    console.log(undefined); //会输出"hello world"
}
testFunc();
console.log(undefined); //输出undefined

void 运算符能对给定的表达式进行求值,然后返回 undefined。也就是说,void 后面你随便跟上一个表达式,返回的都是 undefined,如 void (2), void (‘hello’)。并且void是不能被重写的。但为什么是void 0 呢,void 0 是表达式中最短的。用 void 0 代替 undefined 能节省字节。不少 JavaScript 压缩工具在压缩过程中,正是将 undefined 用 void 0 代替掉了。

总结

  • 通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。
  • 填充<a>的href确保点击时不会产生页面跳转; 填充<image>src,确保不会向服务器发出垃圾请求。
    备注:
    参考文章:谈谈Javascript中的void操作符------里面对GetValue一定要调用做出了详细的解释。

相关文章

  • void 0 与 undefined

    在看React的react-dom.js源码的时候,发现void 0,在很多地方用到。回忆起最初使用void 0的...

  • void 0与undefined

    最近在查看ts编译源码的时候,注意到一个陌生的void 0语句,似乎是取代了undefined。so,为什么要用v...

  • 一些小Tips

    1、void 0 代替 undefined 经常会看到 if (callback !== void 0 ) opt...

  • === void 0 及 === undefined

    参考:https://segmentfault.com/q/1010000007406985/a-10200000...

  • void 0和undefined

    参考链接:1. JavaScript中void 0和undefined[https://www.cnblogs.c...

  • void 0 与 undefined的区别

    想知道下面这段代码会被编译成什么吗 就是下面这段代码,看到没有,仅仅多了一个?将长篇大论的三元表达式交给编译器去处...

  • void 0 代替 undefined 避免 undefined

    在一些低版本的浏览器中,undefined是可以被赋值的。 我们来看看MDN的解释: The void opera...

  • JS老司机技巧

    //void 0代替undefined;function(){return void 0;}除了防止被重写外,还可...

  • TypeScript 基础语法

    1、void 与 undefined和 null 与 void的区别是,undefined 和 null是所有类...

  • JS基础(二)

    判断数据类型、非数值的转换、相等与全等、break与continue、void 0 与undefined type...

网友评论

      本文标题:void 0 与 undefined

      本文链接:https://www.haomeiwen.com/subject/czthxctx.html