厳密にはNumberのインスタンスではないリテラルの数を考えると、Number(またはStringまたはBoolean)オブジェクトのプロトタイプメソッドを対応するリテラルオブジェクトで呼び出すことができますか?ブラウザー間でこの標準的な動作ですか?なぜJavaScriptでは '3 instanceof Number' == falseですが、 '3..method()'はNumber.prototype.methodを呼び出しますか?
これが発生した場合、正確には何が起こっていますか?メソッド内でtypeof this
を調べると、 'number'ではなく 'object'が返されるため、メソッドを呼び出す前にリテラルを対応する型に強制すると思われます。
3はNumberのインスタンスではありません。この型は数値型です。何かのインスタンスに対しては、 'object'型である必要があります。したがって、 'typeof 3 = number'、' typeof new Number(3)= object'、 'Object(3)instanceof Number'で組み込み型 'number、string'などを強制することができます。また、Stringなどのような他のビルドや 'var x = 3; x = Object(x); 'xは現在instanceofの番号です。 – Keith
単純なisNumberチェック - > 'function isNumber(n){return typeof n === 'number' || n instanceof Number; } ' – Keith
いいえ、私はすでにこれらの小切手を定義しています。実際、その実装は、別のウィンドウから来たNumberのインスタンスのブラウザウィンドウでは安全ではありません。 'function isNumber(n){return Object.prototype.toString.call(n)=== '[オブジェクト番号]'を使用する方が良いです。 } 'は、他のウィンドウからの数値プリミティブ、数値インテンシティ、および数インスタンスに対して機能します。また、Array.isArrayのようなシムのデフォルトの実装です。 – Triynko