在读backbone源码时看见这么一段代码:
if (options.unset) for (attr in attrs) attrs[attr] = void 0;
调试后发现attrs中的属性都为undefined,既然如此为何不直接用undefined呢?
基于此,搜索了相关文章,按照我的理解这一篇解释的比较合理:http://stackoverflow.com/questions/5716976/javascript-void-vs-undefined
在IE(7)中,window.undefined是可写的。chrome中window.undefined不可写。
在函数的环境内,undefined也可以被申明为局部变量。
具体看代码:
(function(){ var undefined = 1; alert(undefined);//ie和chrome中都 alert 1 })(); (function(){ undefined = 1; alert(undefined);//ie中alert 1 ,chrome中alert undefined })(); var undefined = 1; alert(undefined);//ie中alert 1 ,chrome中alert undefined
然而,void 0 任何时候都返回undefined。