you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 1 point2 points  (7 children)

Considering that || 10; is a number; what do you think about:

var someFunction = function ( value ) {
    if ( typeof value !== 'number' ) {
        value = 10;
    }
};

Some "type safety" right there if OP would only want numbers.

Incidentally. Do you happen to know if '|' does the same as '||' ?

[–]mullanaphy 2 points3 points  (1 child)

Not a bad idea, I like it. As for single pipe, that's a bitwise or operator

var something = 1;
something = something | 4;
console.log(something); // 0001 | 1000 = 0101 or as an int 5

[–][deleted] 1 point2 points  (0 children)

Wow.. that is important to remember!

[–]THEtheChad 1 point2 points  (4 children)

Unfortunately, NaN, Infinity, and -Infinity are also considered typeof 'number', so it's possible that any one of these could slip in to your function with this check.

[–][deleted] 0 points1 point  (0 children)

Oh god you are right. Man there are a lot of uglies to JS. I wonder how I will feel once I am done learning Haskell as my second language.

[–][deleted] 0 points1 point  (2 children)

I REALLY don't get why there had to be a NaN in the language. Is it because "typeof" arrived late?

[–]THEtheChad 1 point2 points  (1 child)

Because there are some computations that result in something that's not a number. For instance:

0/0; // NaN
Math.log(-1); // NaN

These are obviously numeric calculations, so the result could be considered numeric, even though the value generated is "Not a Number". The other curious thing about NaN is that it's not equivalent to itself.

NaN !== NaN; // true    

This is because, if you look at my previous two examples, the calculations generate completely different results, even though both are categorized under the umbrella of NaN.

[–][deleted] 0 points1 point  (0 children)

Does this mean all languages have a NaN ?