ReferenceError and the global object

global-object, javascript, referenceerror, window

Solution

Because with `window.foo` you are explicitly looking for `foo` property of `window` object which is not the case in latter option. In the latter option, if `foo` isn't defined, you should as developer be able to know that it isn't defined and get the clear error warning rather than interpreter setting it to `undefined` on its own (like first case) which will lead to unexpected results.

Reference Error:

Represents an error when a non-existent variable is referenced. A ReferenceError is thrown when trying to dereference a variable that has not been declared.

Take a look at this article for more info:

- Understanding JavaScript’s ‘undefined’

Quoting from above article:

A Reference is considered unresolvable if its base value is undefined. Therefore a property reference is unresolvable if the value before the dot is undefined. The following example would throw a ReferenceError but it doesn’t because TypeError gets there first. This is because the base value of a property is subject to CheckObjectCoercible (ECMA 5 9.10 via 11.2.1) which throws a TypeError when trying to convert Undefined type to an Object.

Examples:

var foo;
foo.bar; //TypeError (base value, foo, is undefined)
bar.baz; //ReferenceError (bar is unersolvable)
undefined.foo; //TypeError (base value is undefined)

References which are neither properties or variables are by definition unresolvable and will throw a ReferenceError, So:

foo; //ReferenceError

Problem

In JavaScript in the browser `window` is the global object, which means every variable defined in the global scope is a child of `window`. So why do I get this result: ``` console.log(window.foo); // No error, logs "undefined". console.log(foo); // Uncaught ReferenceError: foo is not defined. ``` Fiddle Those two lines should be the same, shouldn't they?

Original source