title: Math.random() javascript function *undefined* on Chrome
body: <p>In first place, I am convinced that this is a trivial question, but I cannot understand why this is happening and I couldn't find an answer anywhere else. I googled my issue with little success, but if I missed something and just wasted your time please point me in the right direction and accept my humble excuses.</p>
  
  <p>That said, here is what happens. I am building a simple script to display a graph drawn by a distributed algorithm (giraph) and I am working on Linux. I import all the libraries and, in particular, jQuery and everything works in Firefox (version 36.0.1). Switching to Chrome (version 41.0.2272.89 (64-bit)), the page stops working. Investigating the issue, I found out that the error was inside the <code>jQuery.extend()</code> function into the jQuery library, at the following line:</p>
  
  <pre><code>expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
  </code></pre>
  
  <p>In fact, trying to invoke <code>Math.random()</code> into the browser console leads to:</p>
  
  <pre><code>&gt; Math.random();
  &gt; Uncaught TypeError: Undefined is not a function
  </code></pre>
  
  <p>Anyway, while typing the console autocompletes the "Math" variable, with the following result:</p>
  
  <pre><code>&gt; Math
  &gt; function (){return "";}
  </code></pre>
  
  <p>This does not happen with Chrome on MacOS X Mavericks. Did anybody experience this kind of behaviour before? </p>
  
  <p><strong>EDIT:</strong> Unfortunately, I don't think that this is a namespace conflict. In my library I import only one other library (other than jQuery), which is <a href="http://sigmajs.org/" rel="nofollow noreferrer">Sigma js</a>. As suggested, I wrote Math in the console and tried to understand which library did override Math (using "Show Function Definition"), with the following result, taken from a file named "VM53" (which I did not write and/or linked directly).</p>
  
  <pre><code>(function (){
      for (var i in window)
      {
      try {
              var jsType = typeof window[i];
              switch (jsType.toUpperCase())
              {                   
                  case "FUNCTION": 
                      if (window[i] !== window.location)
                      {
                          if (window[i] === window.open || (window.showModelessDialog &amp;&amp; window[i] === window.showModelessDialog))
                              window[i] = function(){return true;};
                          else if (window[i] === window.onbeforeunload)   // To try to fix onbeforeunload pop ups some users report seeing but I can't replicate.
                              window.onbeforeunload = null;
                          else if (window[i] === window.onunload)
                              window.onunload = null;                             
                          else
                              window[i] = function(){return "";};
                      }
                      break;                          
              }           
          }
          catch(err)
          {}      
      }
  
      for (var i in document)
      {
          try {
              var jsType = typeof document[i];
              switch (jsType.toUpperCase())
              {                   
                  case "FUNCTION":
                      document[i] = function(){return "";};
                      break;                  
              }           
          }
          catch(err)
          {}      
      }
  
      try {
          eval = function(){return "";};              
          unescape = function(){return "";};
          String = function(){return "";};
          parseInt = function(){return "";};
          parseFloat = function(){return "";};
          Number = function(){return "";};
          isNaN = function(){return "";};
          isFinite = function(){return "";};
          escape = function(){return "";};
          encodeURIComponent = function(){return "";};
          encodeURI = function(){return "";};
          decodeURIComponent = function(){return "";};
          decodeURI = function(){return "";};
          Array = function(){return "";};
          Boolean = function(){return "";};
          Date = function(){return "";};
          Math = function(){return "";};
          Number = function(){return "";};
          RegExp = function(){return "";};
  
          var oNav = navigator;
          navigator = function(){return "";};
          oNav = null;            
      }
      catch(err)
      {}
  
  })();
  </code></pre>