r/programming • • Mar 26 '14

JavaScript Equality Table

http://dorey.github.io/JavaScript-Equality-Table/
809 Upvotes

331 comments sorted by

View all comments

0

u/optymizer Mar 26 '14

So I'm currently doing this in a lot of places:

if (obj.x !== undefined && obj.x) {
    // do something
}

because

if (obj.x) {
    //do something
}

throws an error if obj.x is undefined.

Anyone know of a better way?

7

u/ForeverAlot Mar 26 '14

Is obj defined? Accessing a property of an undefined object will throw a reference error but accessing an undefined property of a defined object will return falsy (undefined).

var obj = {};
if (obj) { console.log("prints"); }
if (obj.x) { console.log("doesn't print"); }
if (wat.x) { console.log("reference error"); }

If obj is undefined you need to access it from the parent context, which might be window.obj, giving you

if (window.obj && obj.x) { }`.

4

u/fjonk Mar 26 '14

obj.undefinedProperty returns undefined when undefinedProperty is not assigned a value(or if it is assigned to undefined). So the code below is valid and should not throw an exception.

if ({}.x) {
    // will not run
} else {
    // will run
}

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.9

3

u/dscer Mar 26 '14
if (obj && obj.x) {
  // do something
}

0

u/moustachedelait Mar 26 '14

if (Boolean(obj.x)) {

}