I'd simply flip it around:
if( !(this.properties.width > 0 && this.properties.height > 0) ) {
return;
}
This will catch null
, undefined
, NaN
, etc., etc.. It will allow numeric strings (provided they can be coerced to a number greater than zero), and of course it'll allow straight-up positive, non-zero numbers.
Update: There's one edge-case I've come across: Arrays. It's some unfortunate JavaScript weirdness to do with type coercion:
[] > 0; // => false (so far so good)
[0] > 0; // => false (as it should be)
[1] > 0; // => true (what?)
[1, 1] > 0; // => false (WHAT?)
So an array with just a single numeric element will be treated as a number when comparing.
Well, actually, as far as I can tell, the array is coerced to a string by coercing each element to a string, and joining them with a comma, and the joined string is then compared lexicographically coerced to a number in order to be compared. (Thanks to Robert in the comments for the correction)
[1] + 0; // => "10"
[1, 1] + 0; // => "1,10"
"0" > 0; // => false
"1" > 0; // => true
"1,1" > 0; // => false
I love JavaScript, but sometimes... jeez...
undefined
for non-existing properties, integers otherwise? Do width and height actually ever become negative? – Bergi Oct 22 '14 at 0:31