javascriptでPHPのis_numericはどう書くか

アキラ
javascriptでさぁ、PHPのis_numericに対応する関数って標準でありそうでないよね。

ワタル
うん。両方=====を使い分ける言語だから、あってくれてもいいんだけど。

アキラ
どう書こうか。

ワタル
じゃあ、とりあえずPHPのis_numericの挙動を確認しようか。

<?php
is_numeric(42);  // 1.true
is_numeric('42');  // 2.true
is_numeric('hello');  // 3.false
is_numeric(' +123.45e6');  // 4.true
is_numeric('');  // 5.false
is_numeric([]);  // 6.false
is_numeric('42 ');  // 7.true PHP7まではfalse!!
is_numeric('3+5');  // 8.false
is_numeric('3 5');  // 9.false
is_numeric(INF);  // 10.true
is_numeric('3.e1234567890');  // 11.true

アキラ
このテストを全部通過すればいいのか。

ワタル
もっとパターンあるかもしれないけど、とりあえずね。
でも今日(2022-11)現在php is_numeric javascriptでググって上の方に出てくるページのコードでこのテストクリアできないのが多いのよ。

アキラ
なんで?

ワタル
PHPのis_numericの仕様がPHP8で変わって最後にスペースの文字列でもtrueになるようになってたり。

アキラ
げ、こんな基本的な仕様変わるんだ。

ワタル
あとはINF入れたときの挙動が逆だったり。まあ上のテストクリアしたjavascriptのコードはこんな感じ。
テストするときはPHPのINFは、jsだとInfinityだから注意してね。

function is_numeric(n) {
    return !isNaN(n) && !isNaN(parseFloat(n));
}
アキラ
意外に短いな。