よく見かける裏技
after = +after;
変数を数値に強制しますafter
。Node.JS ソースを読んで、別の方法を見つけました。
after *= 1; // coalesce to number or NaN
2 つのメソッドの動作は厳密に同じですか?
よく見かける裏技
after = +after;
変数を数値に強制しますafter
。Node.JS ソースを読んで、別の方法を見つけました。
after *= 1; // coalesce to number or NaN
2 つのメソッドの動作は厳密に同じですか?
私の疑いが本当であることを確認するために簡単にグーグルした後、私はこの結論に達しました. 演算子を使用+
して数値に変換する方が高速です。これは、型キャストの後に数学演算が発生しないためです。一方、*=
アプローチを使用すると、 afterafter
が変換され、 が乗算され1
ます。
注: 場合によっては、after = after-0
とは異なる動作を呼び出しますafter = after+0
。私は日付でそれに気づきました。
これは Chrome v39 でのみテストされています。
var date = new Date(2000,0,1);
date += date; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)"
var date2 = new Date(2000,0,1);
date2 + 0; //"Sat Jan 01 2000 00:00:00 GMT+0000 (GMT Standard Time)0"
date2 - 0; //946684800000
date2 * 1; //946684800000
JS仕様で何が定義されているかわかりませんが、日付と数値の両方を文字列にキャストでき、+演算子が文字列で機能するため、Chromeは文字列連結を使用します。- 演算子には同等の文字列がないため、数値比較にフォールバックします。
比較のために日付を数値に強制するときにこれが役立つことがわかりました
はい、ただし、これを行うのは単項+ 演算子だけであることに注意してください。つまり10 + "10"
、あなたを与えるでしょう"1010"
。
おそらくエラーが発生しにくいオプションは、asm.js の機能を使用することです。
10 + ("10"|0)
マイナス面ではありますが、ブラケットが必要です。いずれにせよ、これは最速のオプションである必要があります (おそらく単項 + と同じです)。