javascript - `void 0` 是什么意思?

标签 javascript backbone.js

阅读Backbone.js源代码,我看到了:

validObj[attr] = void 0;

什么是void 0?在这里使用它的目的是什么?

最佳答案

void 0是什么意思?

void[MDN]是一个前缀关键字,它接受一个参数并始终返回 undefined

示例

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

这样做有什么意义?

这似乎没什么用,不是吗?如果它总是返回 undefined,那么只使用 undefined 本身有什么问题?

在一个完美的世界里,我们可以安全地使用 undefined:它比 void 0 更简单、更容易理解。但是,如果您以前从未注意到,这并不是一个完美的世界,尤其是在涉及到 Javascript 时。

使用 undefined 的问题在于 undefined 不是保留字 ( it is actually a property of the global object [wtfjs] )。也就是说,undefined 是一个允许的变量名,因此您可以随意为其分配一个新值。

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

注意:在任何支持 ECMAScript 5 或更新版本(即实际上除了 IE 8 之外的任何地方)的环境中,这不再是问题,它将全局对象的 undefined 属性定义为只读(因此只能在您自己的本地范围内隐藏变量)。但是,此信息对于向后兼容仍然有用。

alert(window.hasOwnProperty('undefined')); // alerts "true"
alert(window.undefined); // alerts "undefined"
alert(undefined === window.undefined); // alerts "true"
var undefined = "new value";
alert(undefined); // alerts "new value"
alert(undefined === window.undefined); // alerts "false"
另一方面,

void 不能被覆盖。 void 0总是 返回 undefined。另一方面,undefined 可以是 Javascript 先生想要的任何东西。

为什么是 void 0,具体来说?

我们为什么要使用void 00 有什么特别之处?难道我们不能像使用 1421000000"Hello, world!" 一样简单吗? ?

答案是,是的,我们可以,而且效果也一样。传入 0 而不是其他一些参数的唯一好处是 0 短且惯用。

为什么这仍然相关?

虽然 undefined 在现代 JavaScript 环境中通常可以被信任,但 void 0 有一个微不足道的优势:它更短。编写代码时不必担心这种差异,但它可以在大型代码库上加起来足够多,以至于大多数代码压缩器将 undefined 替换为 void 0 以减少字节数发送到浏览器。

关于javascript - `void 0` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452341/

相关文章:

javascript - 将 Backbone.Layout 定义为 require js 模块?

backbone.js - 低耦合 : add a model to a collection of a different view

javascript - 路由器应该负责网络请求吗? ( Backbone .js)

backbone.js - Backgrid 格式化程序从其他列添加值

javascript - 如何 stub img 调用

javascript - 如何在react-native或reactjs中维护react usestate中的先前数据和当前数据?

javascript - 在 Python 中处理 SVG

javascript - 获取chrome.tabs.captureVisibleTab的图片文件

javascript - 如何根据点击获取对应对象的值

javascript - 脚本标记上的 defer 属性使我的脚本太长而无法加载