"void 0"是什么意思?

Ran*_*lue 486 javascript backbone.js

可能重复:
"javascript:void(0)"是什么意思?

通过Backbone.js源代码阅读,我看到了这个:

validObj[attr] = void 0;
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*son 963

什么void 0意思?

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

例子

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined
Run Code Online (Sandbox Code Playgroud)

那是什么意思?

看起来很没用,不是吗?如果它总是返回undefined,那么仅使用undefined它本身有什么问题?

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

使用的问题undefined是它undefined不是保留字(它实际上是全局对象[wtfjs]的属性).也就是说,undefined是一个允许的变量名称,因此您可以根据自己的价格为其分配一个新值.

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
Run Code Online (Sandbox Code Playgroud)

注意:这在任何支持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"
Run Code Online (Sandbox Code Playgroud)

void另一方面,不能超越.void 0始终返回undefined.undefined另一方面,可以是Javascript先生决定他想要的任何东西.

特别是为什么void 0

我们为什么要用void 0?有什么特别之处0?难道我们不能轻易使用1,或者42,1000000或者"Hello, world!"

答案是,是的,我们可以,而且它也会起作用.传入0而不是其他一些论点的唯一好处0是短而惯用.

为什么这仍然相关?

虽然undefined在现代JavaScript环境中通常可以信任,但void 0它有一个微不足道的优点:它更短.在编写代码时,差异不足以担心,但它可以在大多数代码管理器替换的大型代码库中加起来undefined,void 0以减少发送到浏览器的字节数.

  • 但为什么需要一个参数呢?排除表达的任何有用例子?为什么无效0?而不是无效1? (5认同)
  • 另一个常见的模式是在一个立即函数中提供`undefined`作为参数:`(function(undefined){...}())`这对于缩小特别有用. (5认同)
  • @Sam不是真的,`void x`总是*返回*undefined.`typeof x ==="undefined"`检查`x`是否未定义. (4认同)
  • 所以这与`if (typeof options.something === 'undefined')` 基本相同,我之前从 SO 中记得它是检查未定义性的安全模式? (2认同)
  • 有趣的是当前版本的Chrome和Firefox不适用!:) (2认同)
  • @PeterOlson是的,我知道这一点,但我的意思是,为什么 void 需要参数,因为传递给它的内容并不重要? (2认同)

epa*_*llo 104

void 0返回undefined,可以覆盖时undefined不能覆盖.

var undefined = "HAHA";
Run Code Online (Sandbox Code Playgroud)

  • 哇,我一直在投票.当这张贴在3年前发布时,浏览器允许您将undefined设置为任何值. (55认同)
  • ECMAScript 5将undefined定义为只读 (23认同)
  • 是时候更新你的答案了. (15认同)
  • 如果答案随着时间的推移变得多余,为什么不应该倾向于支持更新的答案呢? (7认同)
  • @licancabur:我认为这只是严格模式代码,是吗? (2认同)

Dig*_*ane 29

void是一个保留的JavaScript关键字.它评估表达式并始终返回undefined.

  • 它可能比`undefined`短,并且保证返回它(不像全局可重写的`undefined`). (8认同)