void 0 或者 undefined

Problem

在檢查一個值是否爲undefined的時候。大家是假設去測試的?javascript

要是以前的我會這樣子測試java

 function isUndefined(obj){ return obj === undefined; }

但是近期在看《javascript框架設計》這本書的時候,他用了第二種方法,我就有點納悶了。chrome

 function isUndefined(obj){ return obj === void 0; }

二者誰比較好點呢?怎樣比較呢?應該從它的適用性、瀏覽器兼容性來比較!express

而後我就在MDN找到void操做符的定義和undefined的說明,才知道《javascript框架設計》中的方法略勝一籌。瀏覽器

爲何呢?如下來解說框架

Description

void
The void operator evaluates the given expression and then returns undefined.也是就是說void是一個操做符。它老是返回的是undefined這個值
undefined
The global undefined property represents the value undefined.就是說undefined事實上是一個全局變量,它的是就是表明着undefined。

咱們可以用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

Why void 0, specifically?

stackoverflow站點的一個問題有提到必定要用void 0嗎?不能是void 1,void 10000,void "hello world" 或者其它嗎?答案都是可以的,僅僅是0給人的感受就是簡短、慣用.

Reference

undefined
void
What does void 0 mean?
相關文章
相關標籤/搜索