light log

学んだこととか

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。

多いけど、一度覚えればあんまり忘れない。falseundefinednullはあんまり間違えそうにないので、0NaNと空文字列が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の仕様はうれしい。