編集:全員のフィードバックに基づいて、この質問の元のバージョンは、標準に関連するものではなく、設計に関連するものです。より SO フレンドリーに。
オリジナル:
JS プリミティブは、ECMA 標準に従って、そのプリミティブのオブジェクト ラップ バージョンと「同等」と見なされるべきですか?
改訂された質問
現在の JavaScript でプリミティブにラップされたオブジェクトを比較する方法について、普遍的な合意はありますか?
var n = new Number(1),
p = 1;
n === p; // false
typeof n; // "object"
typeof p; // "number"
+n === p; // true, but you need coercion.
編集:
@Pointy がコメントしたように、ECMA 仕様 (262、S15.1.2.4)にはNumber.isNaN()
、次のように動作するメソッドが記述されています。
Number.isNaN(NaN); // true
Number.isNaN(new Number(NaN)); // false
Number.isNaN(+(new Number(NaN))); // true, but you need coercion.
どうやら、この動作の正当な理由は、IF the argument coerces toisNaN
を返すことです。ネイティブの操作方法に基づいて直接強制することはありません。true
NaN
new Number(NaN)
isNaN
現時点では、プリミティブではなくネイティブ オブジェクト ラッパーを直接使用することによるパフォーマンス ヒットや型変換などのトリッキーさが、セマンティックなメリットを上回っているようです。