We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我们经常会在一些代码中看到void 0的写法,这种写法其实现在已经不需要了
void 0
本文翻译自:https://p42.ai/blog/2022-05-10/you-dont-need-void-0
void操作符执行一个表达式并返回原始值undefined。void 0执行0,这什么都不会发生并且会返回undefined。是undefined的别名
0
undefined
undefined本身不是一个保留关键字而是一个全局对象的一个属性
在ES5(2009)之前,全局属性undefined的值是能被修改的,这会导致undefined一些不符合预期的行为
下面的例子(这在现在JavaScript引擎中已经不是这样了)
// 修改全局对象中的undefined属性 undefined = "something else"; // 在其它js文件或者script中 if (aVariable === undefined) { doSomething(); }
修改全局的undefined可能发生在第三方代码中,例如通过脚本标签导入的库。由于void 0总是返回undefiend的实际原始值,因此在ES5之前通常使用它来在防止全局undefined被修改的情况下仍能确保undefined判断的准确性
undefiend
undefined可以在全局对象上被修改的问题很大,以至于JavaScript标准在ES5中改变了。在ES5中,全局属性undefined变成了只读。尝试更改更改undefined的值在现代JavaScript中没有任何作用
globalThis.undefined = "something else"; console.log(undefined); // 在现代JS引擎中打印undefined
虽然不再能更改全局属性undefined,但undefined仍然不是JavaScript中的保留关键字。因此它仍然可以被局部变量覆盖
{ const undefined = "something else"; let check = aVariable === void 0; // 这里的void 0仍需要 }
我们应该避免使用undefined作为变量名。ESLint规则no-undefined 不允许使用 undefined 作为变量名并防止出现覆盖问题
表达式void 0比undefined短。JavaScript包的大小对于创建快速加载的网站是至关重要的并且减少一些字节会有所帮助
但是最好将代码大小优化让Terser之类的工具在打包过程中进行处理。这些工具可以执行许多不同的优化,并且源代码在没有任何手动的代码大小优化(如使用void 0而不是undefined)的情况下也更易于阅读
总之,在现代浏览器和JavaScript引擎中没有理由再使用void 0
相反,void 0使JavaScript代码更难阅读,因为需要知道void 0的含义并处理相同概念(undefined)的不同术语(void 0,undefined)
结论:使用undefined并移除不必要的void 0
The text was updated successfully, but these errors were encountered:
No branches or pull requests
我们经常会在一些代码中看到
void 0
的写法,这种写法其实现在已经不需要了void操作符执行一个表达式并返回原始值undefined。
void 0
执行0
,这什么都不会发生并且会返回undefined
。是undefined
的别名为什么
void 0
会用来当作undefined
的别名?undefined
本身不是一个保留关键字而是一个全局对象的一个属性在ES5(2009)之前,全局属性
undefined
的值是能被修改的,这会导致undefined
一些不符合预期的行为下面的例子(这在现在JavaScript引擎中已经不是这样了)
修改全局的
undefined
可能发生在第三方代码中,例如通过脚本标签导入的库。由于void 0
总是返回undefiend
的实际原始值,因此在ES5之前通常使用它来在防止全局undefined
被修改的情况下仍能确保undefined
判断的准确性ES5之后的全局属性
undefined
undefined
可以在全局对象上被修改的问题很大,以至于JavaScript标准在ES5中改变了。在ES5中,全局属性undefined
变成了只读。尝试更改更改undefined的值在现代JavaScript中没有任何作用undefined
仍然可以被局部变量覆盖虽然不再能更改全局属性
undefined
,但undefined
仍然不是JavaScript中的保留关键字。因此它仍然可以被局部变量覆盖我们应该避免使用
undefined
作为变量名。ESLint规则no-undefined 不允许使用 undefined 作为变量名并防止出现覆盖问题void 0
是否有助于减少打包体积?表达式
void 0
比undefined
短。JavaScript包的大小对于创建快速加载的网站是至关重要的并且减少一些字节会有所帮助但是最好将代码大小优化让Terser之类的工具在打包过程中进行处理。这些工具可以执行许多不同的优化,并且源代码在没有任何手动的代码大小优化(如使用
void 0
而不是undefined
)的情况下也更易于阅读在现代JavaScript中避免使用void 0
总之,在现代浏览器和JavaScript引擎中没有理由再使用
void 0
undefined
不能在ES5以及后续的环境中更改undefined
可以通过ESLint规则no-undefined进行禁止undefined
替代成void 0
实现体积优化相反,
void 0
使JavaScript代码更难阅读,因为需要知道void 0
的含义并处理相同概念(undefined
)的不同术语(void 0
,undefined
)结论:使用
undefined
并移除不必要的void 0
The text was updated successfully, but these errors were encountered: