RubyとJavaScriptの"falsy"な値
JavaScriptでは混乱しがちな、booleanの文脈でfalseになる値(=falsyな値)について、Rubyではどうなってるか調べた。
まずJS(Node)。
[ false, undefined, null, 0, NaN, '', [], {}, new Number(0), new String(''), ].forEach(function (v) { console.log(v + ' => ' + !!v); }); /* 実行結果 false => false undefined => false null => false 0 => false NaN => false => false => true [object Object] => true 0 => true => true */
後半結果が見づらい(というか結果だけでは何なのか判断できない)けど、
- false
- undefined
- null
- 0
- NaN
- ''
がfalsy。他はtruthy。
多いけど、一度覚えればあんまり忘れない。false
、undefined
、null
はあんまり間違えそうにないので、0
とNaN
と空文字列がfalse
になることと、[]
、{}
も含めてオブジェクトは全部true
になることを覚えておけばいい。
対してRuby。
[ false, nil, 0, "", [], {}, ].each do |v| puts "#{v.inspect} => #{!!v}" end =begin 実行結果 false => false nil => false 0 => true "" => true [] => true {} => true =end
falsyなのは
false
nil
で、他はtruthy。
シンプル。あと#inspect
便利。
まとめ
JSの仕様も覚えれば大したことないとは言っても、もともとシンプルなRubyの仕様はうれしい。