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なのは
falsenil
で、他はtruthy。
シンプル。あと#inspect便利。
まとめ
JSの仕様も覚えれば大したことないとは言っても、もともとシンプルなRubyの仕様はうれしい。