在檢查一個值是否爲undefined的時候。大家是假設去測試的?javascript
要是以前的我會這樣子測試java
function isUndefined(obj){ return obj === undefined; }
但是近期在看《javascript框架設計》這本書的時候,他用了第二種方法,我就有點納悶了。chrome
function isUndefined(obj){ return obj === void 0; }
二者誰比較好點呢?怎樣比較呢?應該從它的適用性、瀏覽器兼容性來比較!express
而後我就在MDN找到void操做符的定義和undefined的說明,才知道《javascript框架設計》中的方法略勝一籌。瀏覽器
爲何呢?如下來解說框架
咱們可以用window.hasOwnProperty("undefined");
去測試,返回true就證實它是全局變量。lua
既然它是全局變量的話,咱們就可以改動它了,在改動一些特定變量方面ES3和ES5中是不同的。ES3中每個變量都是可寫可配置可遍歷的。但是ES5設置一些API去設置變量的這些特性。spa
咱們可以在chrome(支持ES5)的控制檯敲上一句這樣子的代碼Object.getOwnPropertyDescriptor(window,"undefined")
,咱們可以看見他打印出來的是Object {value: undefined, writable: false, enumerable: false, configurable: false}
。設計
可以看見在ES5中的undefined值是不能改動(即writable爲false)的,但是在舊的瀏覽器比方IE七、8。你就可以改動undefined的值,致使你的isUndefined失去效果了。code
stackoverflow站點的一個問題有提到必定要用void 0嗎?不能是void 1,void 10000,void "hello world" 或者其它嗎?答案都是可以的,僅僅是0給人的感受就是簡短、慣用.