一些JavaScript蠢事:undefined = true;然後回到未定義?
如果這個工程
undefined = true;
那麼你怎麼能恢復到設定undefined
回代表undefined
?
當然,最簡單的方法是在另一個變量存儲undefined
設置undefined
到true
之前。還有什麼其他方法可以恢復undefined
?
首先想到將它恢復爲delete undefined;
,沒有工作。
一些JavaScript蠢事:undefined = true;然後回到未定義?
如果這個工程
undefined = true;
那麼你怎麼能恢復到設定undefined
回代表undefined
?
當然,最簡單的方法是在另一個變量存儲undefined
設置undefined
到true
之前。還有什麼其他方法可以恢復undefined
?
首先想到將它恢復爲delete undefined;
,沒有工作。
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;
(function(undefined) {
// undefined is undefined again!
})();
jQuery使用這種模式。
delete
運營商是最適合從對象刪除特性。有許多事情,它不會工作,並且將其用於Array
僅設置元素undefined
(排序的,它不會與in
列舉)。最好使用splice()
與Array
。
+1很有趣:) – alex 2011-04-20 05:38:21
媽的,剛來到這裏編輯'void'到我的答案,你打我吧:P – alex 2011-04-22 09:13:10
@alex哈哈,是的,我完全忘記了它前面太。 – 2011-04-22 09:38:51