unless val は、空文字列、0, false, null, undefined の場合に true になる。一方 unless val? は null, undefined の場合に true になる。関数の必須引数チェックのときは throw new Error('') unless arg? とすることにする。
テストスクリプト
vals = ['', '0', 0, 0.0, false, 'false', null, 'null', undefined, 'undefined', [], {}]
console.log ' ', '\t', '?', '\t', 'value'
for val in vals
console.log(
(unless val then 'x' else 'o'),
'\t',
(unless val? then 'x' else 'o'),
'\t',
JSON.stringify(val)
)
結果
? value
x o ""
o o "0"
x o 0
x o 0
x o false
o o "false"
x x null
o o "null"
x x undefined
o o "undefined"
o o []
o o {}