2011-04-20 20 views
5

一些JavaScript蠢事:undefined = true;然後回到未定義?

如果這個工程

undefined = true; 

那麼你怎麼能恢復到設定undefined回代表undefined


當然,最簡單的方法是在另一個變量存儲undefined設置undefinedtrue之前。還有什麼其他方法可以恢復undefined

首先想到將它恢復爲delete undefined;,沒有工作。

回答

8

Alex's answer安全實用確保undefined確實未定義的方法。

但JS是超級靈活,所以爲了好玩,如果你想恢復的全球undefined,那麼你可以從一個新的功能範圍的安全性重新分配window.undefined

(function() {   // Create a new scope 
    var a;     // "a" is undefined in this scope 
    window.undefined = a; // Set the global "undefined" to "a" 
})()      // Execute immediately 

進一步考慮這個想法,你可以重新配置上述變量:

undefined = (function() { 
    var a;     // "a" is undefined 
    return a;    // return "a" 
})(); 

還是真的,只是這樣的:

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

但事實上,你實際上並不需要任何回報:


當然,再有也就是在void operator ;-) 衛生署!

undefined = void 0; 
+0

+1很有趣:) – alex 2011-04-20 05:38:21

+0

媽的,剛來到這裏編輯'void'到我的答案,你打我吧:P – alex 2011-04-22 09:13:10

+0

@alex哈哈,是的,我完全忘記了它前面太。 – 2011-04-22 09:38:51

7
(function(undefined) { 

    // undefined is undefined again! 

})(); 

jQuery使用這種模式。

delete運營商是最適合從對象刪除特性。有許多事情,它不會工作,並且將其用於Array僅設置元素undefined(排序的,它不會與in列舉)。最好使用splice()Array

相關問題