4

Js为什么常用void 0代替undefined?

 1 year ago
source link: https://www.fly63.com/article/detial/12304
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家都知道void运算符总会返回一个undefined的结果,那么为什么要用void 0来代替undefined呢(注意:写法上void(0)相当于void 0 )?这不是多此一举了吗?下面为大家讲讲这样使用的原因。

避免undefined被重新赋值

为什么用void 0代替,首先void是保留字,不可以呗覆盖重写,void运算符可以对后面的表达式进行运算并且返回undefined.也就是void后边无论是是什么都返回undefined,而运算式最简单的是0,所以就用void 0来表示。

而undefined 在Js中只是一个全局变量,表示变量或属性未定义的值。由于">undefined它其实是一个「全局对象」中的一个全局变量,所以它可能会被重新赋值。

ps:除了 undefined 之外,类似的还有 NaN、Infinity、globalThis 也是全局对象的属性。它们的属性描述对象都是:不可写、不可枚举、不可配置

例如,在下面的代码中,我们可以看到 undefined 被重新赋值为字符串 "

fly63前端网  ":

undefined = "fly63前端网!"; console.log(undefined);  //fly63前端网

因此,为了避免 undefined 被重新赋值,有时候可能会使用 void 0 来代替 undefined。

void 0 表示对于任何给定的表达式,它都会返回 undefined。因为 void 操作符接受一个表达式作为参数,所以不可能被重新赋值。

例如,下面的代码中,我们可以看到 void 0 会返回 undefined:

console.log(void 0);  //undefined
">
还有,需要特别注意的是:
undefined 并不是 ECMAScript 标准中的一个保留字,因此它是可以被作为变量标识符而使用的(但项目中千万别这么用),就行 window 一样。

void 0 节省字节

void 0比undefined字符所占空间少。比如著名的工具库 underscore 大量使用了 void 0 来代替 undefined,再者 UglifyJS、Terser 等代码压缩工具也会将 undefined 转换为 void 0,这样可以节省一些字节:

function isUndefined(x) {
return x === undefined
}

// Minified
function isUndefined(n){return void 0===n}

但我们在编写代码的时候,直接使用 undefined 也是没有太大问题的,注意下前面提到的一些点就好了,其余的就交由工具来处理即可。

void 0 其他应用

除了取undefined外,void还有什么其它用处吗?

还有一个常见的功能,填充href。比如:微博截图,它的转发, 收藏, 讨论都是超链接,但是用户并不希望点击它们会跳转到另一个页面,而是引发出一些交互操作。

<a href="javascript:void(0);">
这个链接点击之后不会做任何事情,
如果去掉 void(),点击之后整个页面会被替换成一个字符 0。
</a>
<p> chrome中即使<a href="javascript:0;">也没变化,firefox中会变成一个字符串0 </p>
<a href="javascript:void(document.body.style.backgroundColor='green');">
点击这个链接会让页面背景变成绿色。
</a>

理论上而言,超链接如果没有URL,点击它就会刷新整个页面。于是便用上了href=”javascript:void(0)的方式,确保点击它会执行一个纯粹无聊的void(0)。

另一种情况是,如果我们要生成一个空的src的image,最好的方式似乎也是src=’javascript:void(0)’。

注意,虽然这么做是可行的,但利用 javascript: 伪协议来执行 JavaScript 代码是不推荐的,所以推荐使用其他标签

void有如下作用:

- 通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。

- 填充的href确保点击时不会产生页面跳转; 填充的src,确保不会向服务器发出垃圾请求。

链接: https://www.fly63.com/article/detial/12304


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK