Live data from Hacker News

$.answer=42

google-analytics.com

11–20 of 27 posts

Re: $.answer=42

#11
It's tricky to tell exactly what's happening because the code is obfuscated through compilation, but as best I can tell, it's using the `answer` value to prevent another global from making it seem like the Analytics code has already been initialized.

There is a JavaScript object representing all of the Google Analytics state and functions. When this object is set up, they add the property "answer = 42" to it. Then, before making this object globally accessible at `window.ga`, they double check that `window.ga` does not yet exist or that `window.ga.answer` does not equal 42. If it already equals 42, then the initialization must have already happened (maybe the Analytics code was included twice?), and so it doesn't proceed to clobber that already-initialized global Analytics state. Checking that the `window.ga` variable doesn't exist is not quite enough, since other JavaScript on the page may have set that property for some reason (of course, this logic wouldn't work if other code on the page had simple set `window.ga.answer = 42`, but that's unlikely to happen by accident). As long as it looks like the initialization hasn't already run, then it goes ahead and does the initialization and makes the result globally accessible at that point.

tl;dr: It's not just a joke; it's actually used to make it less likely that other JavaScript on the page hasn't created a global variable called `ga` which may otherwise prevent the Analytics code from running.

Re: $.answer=42

#12
post #4

Is it just me, or is their analytics JS file down?

Like you I got a 404. Then I remembered I blacklist this adress in /etc/hosts :

0.0.0.0 google-analytics.com

Maybe you forgot you do too ?

Re: $.answer=42

#14
Nice finding ! And it's so true ! 42 is the answer to everything ;)

Even to check an instantiation ...

    $.answer = 42;
[...]

    $.N = function () {
    
        var a = O[gb];
    
        if (!a || 42 != a.answer) {
[...]

            O[gb] = $;
[...]

        }
    
    };
    
    $.N();

Re: $.answer=42

#15

It's tricky to tell exactly what's happening because the code is obfuscated through compilation, but as best I can tell, it's using the `answer` value to prevent another global from making it seem like the Analytics code has already been initialized. There is a JavaScript object representing all of the Google Analytics state and functions. When this object is set up, they add the property "answer = 42" to it. Then, b…

Here's an useful website if you want to make the code more readable: http://jsbeautifier.org/

Re: $.answer=42

#17
post #15

It's tricky to tell exactly what's happening because the code is obfuscated through compilation, but as best I can tell, it's using the `answer` value to prevent another global from making it seem like the Analytics code has already been initialized. There is a JavaScript object representing all of the Google Analytics state and functions. When this object is set up, they add the property "answer = 42" to it. Then, b…

Here's an useful website if you want to make the code more readable: http://jsbeautifier.org/

Chrome also has a button[0] to do this automatically in the Developer Tools, which is what I used when I wrote the initial comment.

[0]: https://developers.google.com/chrome-developer-tools/docs/ja...

Re: $.answer=42

#18
post #14

Nice finding ! And it's so true ! 42 is the answer to everything ;) Even to check an instantiation ... $.answer = 42; [...] $.N = function () { var a = O[gb]; if (!a || 42 != a.answer) { [...] O[gb] = $; [...] } }; $.N();

42 is the answer to everything

That's not really what the Hitchhikers Guide to the Galaxy said - rather, 42 is the answer to the ultimate question of life, the universe and everything. But since we don't know what the question is... Very different from the answer to everything.

Re: $.answer=42

#19
post #10
post #3

$ is what? [1] [1] For those not in on the joke: http://en.wikipedia.org/wiki/42_(number)#The_Hitchhiker.27s_...

var $=function(a){J(1);Z.D[G](Z,[arguments])}; $ is a function object. $.answer is a property of that object. $ itself doesn't really mean anything special in javascript. jQuery and other libraries often use $ as their main object, so it's probably best to avoid using it unless you need to or it's wrapped in another function.

The only thing I've learned in the years that I've been writing Javascript is that the dollar symbol variable is as contentious as the West Bank. Obviously there has to be globals somewhere or else a library ceases to be a library in JS, but I see no problem is using the word jQuery explicitly, or simply passing it into a SEAN/IIFE:

  (function($) {
     $('#thing').hide();
  })(jQuery);

Re: $.answer=42

#20
post #12
post #4

Is it just me, or is their analytics JS file down?

Like you I got a 404. Then I remembered I blacklist this adress in /etc/hosts : 0.0.0.0 google-analytics.com Maybe you forgot you do too ?

Yeah, I do. How forgetful of me. Thanks!
Post reply on HN