最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - undefined = true; then back to undefined? - Stack Overflow

programmeradmin0浏览0评论

Some javascript tomfoolery:

If this works

undefined = true;

then how can you revert back to set undefined back to representing undefined?


Sure, the easy way is to store undefined in another variable before setting undefined to true. What other way can you restore undefined?

First thought to set it back was delete undefined;, didn't work.

Some javascript tomfoolery:

If this works

undefined = true;

then how can you revert back to set undefined back to representing undefined?


Sure, the easy way is to store undefined in another variable before setting undefined to true. What other way can you restore undefined?

First thought to set it back was delete undefined;, didn't work.

Share Improve this question asked Apr 20, 2011 at 4:40 MikeMMikeM 27.4k4 gold badges67 silver badges80 bronze badges 1
  • In most browsers, window.undefined is not writable; even after executing window.undefined=true, window.undefined still evaluates to undefined. See developer.mozilla/en-US/docs/Web/JavaScript/Reference/… . (undefined is a property of the global window object, so undefined and window.undefined are equivalent.) – Mike Rosoft Commented May 30, 2018 at 10:58
Add a ment  | 

2 Answers 2

Reset to default 8

Alex's answer is the safe and practical way to ensure undefined is really undefined.

But JS is super flexible, so for fun, if you wish to revert the global undefined, then you can reassign window.undefined from the safety of a new function scope:

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

Taking this idea futher, you can reconfigure the above to bee:

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

Or really, just this:

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

But in fact, you don't actually need to return anything:

undefined = function(){}();

Of course, then there's also the void operator ;-) doh!

undefined = void 0;
(function(undefined) {

   // undefined is undefined again!

})();

jQuery uses this pattern.

delete operator is best for deleting properties from objects. There are a number of things it won't work on, and using it with an Array just sets the element to undefined (sort of, it won't be enumerated with in). Best to use splice() with an Array.

发布评论

评论列表(0)

  1. 暂无评论