string 型を boolean 型に変換する
parseInt() のように parseBool() があるかと思ったけど、
なさそうなので自分でコードを書いて実装する必要がある。
if で簡潔に実装
これだと文字列が true 以外だと全て false になる。
期待通りに動かない。
var t = 'true';
var f = 'false';
var i = '1';
// string 型から boolean 型に変換
console.log((t == 'true')); // true
console.log((f == 'true')); // false
console.log((i == 'true')); // false
Boolean クラスを試す
これも期待通りに動かない。
var t = 'true';
var f = 'false';
console.log(Boolean(t)); // true
console.log(Boolean(f)); // true
parseBool() を自作する
仕様上 true, false 判定となる値以外をどう扱うべきか、
どういう実装がベターなのかは正直分からない。
function parseBool(v) {
switch (v) {
case true:
case 'true':
case 1:
case '1':
return true
case false:
case 'false':
case '':
case 0:
case -1:
case '0':
case '-1':
case null:
case undefined:
return false
default:
// String
// WARN: 色々パターンがあると思うので、怪しい挙動だったらコメントアウトする。
if (typeof v == 'string') {
if (Number.isNaN(Number(v))) {
return true
}
}
// NaN
if (Number.isNaN(v)) {
return false
}
return null
}
}
function check(v) {
console.log(`${v} is ${parseBool(v)}.`)
}
check(true) // true is true.
check('true') // true is true.
check(false) // false is false.
check('false') // false is false.
check('test') // test is true.
check(NaN) // NaN is false.
check(Number('test')) // NaN is false.
check() // undefined is false.
check(undefined) // undefined is false.
check(null) // null is false.
check(1) // 1 is true.
check(2) // 2 is null.
check(-1) // -1 is false.
check(-2) // -2 is null.
check('') // is false.
check('-1') // -1 is false.
check('-2') // -2 is null.
check(1n) // 1 is null.
boolean 型を string 型に変換する
Boolean オブジェクトは toString() を持っている。
var t = true;
var f = false;
console.log(t.toString());
console.log(f.toString());