答えて
以下注
"" instanceof String; // => false
new String("") instanceof String; // => true
instanceof
は、オブジェクトを必要とするが、""
はリテラル文字列ではなく、文字列オブジェクトです。 typeof
機能を使用して、次のタイプの点に注意してください。
typeof "" // => "string"
typeof new String("") // => "object"
typeof [] // => "object"
typeof new Array() // => "object"
'リテラル文字列'と 'String'オブジェクトの違いは何ですか?それはなぜ(明らかに)重要ですか?私が知る限り、それらは互換的に使用することができますが、何かが '文字列'であるかどうかをチェックするために 'instanceof'を使うことはできません。 – Halcyon
' [] 'は配列リテラルではありません。 ''は文字列リテラルですか? – FishBasketGordo
@FishBasketGordo配列には、あらゆる種類のプリミティブとオブジェクトを含めることができます。 –
''
は、オブジェクト、原始的ではないためにです。
JavaScriptのプリミティブの中には、オブジェクトラッパーを持つものがあります。これらは、new
の組み込みコンストラクターを使用してラッパーのインスタンスを作成すると作成されます。
通常、new
を除外すると、関数がプリミティブに強制されることが多いため、new
が必要です。
typeof new String(''); // "object"
typeof String(''); // "string"
typeof ''; // "string"
オブジェクトのラッパーを持っているプリミティブはstring
、number
とboolean
です。
null
およびundefined
のプリミティブはありません。
'[]'のプリミティブ(つまりラッパー以外のオブジェクト)は何ですか? – Randomblue
Randomblue:1つではありません。配列は常にオブジェクトです。 –
@Randomblueは存在しません。なぜプリミティブがあるのでしょうか? – Raynos
''
は何のインスタンスでもありません。それはプリミティブ型で、5.5
またはtrue
とほぼ同じように動作します。文字列プリミティブとStringオブジェクトには違いがあります。参照:new String()
、new Number()
またはnew Boolean()
で作成
new String('') instanceof String; // true
ものは、プリミティブ型の周りのオブジェクトラッパーである、と彼らは同じではありませんね。
、文字列などをチェックする代わりにtypeof
を使用するには:
typeof '' === 'string'; // true
を両方をチェックするには、この使用:のためObject.prototype.toString.call
を使用する理由のカップルがあります
Object.prototype.toString.call('') === '[object String]'; // true
Object.prototype.toString.call(new String('')) === '[object String]'; // true
を配列、文字列、数値の一般的なコードとブール値。それらは次のとおりです。
- 文字列、数値、ブール値の場合、人々はプリミティブ型の代わりにラッパーオブジェクトのインスタンスを渡すことがあります。それらは通常、暗黙的に(暗黙的に
valueOf()
を使用して)機能します。したがって、ライブラリコードを記述する場合はそれらを受け入れるべきです。 - 配列の場合、別のウィンドウ(たとえば)から配列を受け取った場合、
instanceof Array
を使用すると、false
が返されます。Object.prototype.toString.call
メソッドは、すべての目的に使用できます。
これは、jQueryと他の大規模な一般的なライブラリの機能です。
私はいくつかの掘り下げをしており、それはコンパイラの最適化であるstring interningと関係があると思います。
さて、いくつかの落ち着きの準備ができましたか? :D
"abc" == "abc"; // true
"abc" === "abc"; // true
私はこれが原因で偶然にも(右「文字列」を取得するためのイェーイ)概念的に、多くの意味を作る「インターン文字列」の真であると仮定します。
new String("abc") == new String("abc"); // false
new String("abc") === new String("abc"); // false
あなたはString
がオブジェクトであり、オブジェクトが同様の内部状態を持つオブジェクトに等しいだけで、それ自体に等しいと仮定していない場合、これは理にかなっています。 Javaのように(あるいはそれはどうにか使われていた)。
そして今、キッカーのために:
(new String("abc")).substr(0,3) === (new String("abc")).substr(0,3); // true!
だから、明らかJavaScriptインタープリタは常にString
オブジェクトを使用する上でのインターンの文字列を好むでしょう。
次に、String
オブジェクトの使用は何ですか?どうやら、友人とうまくやっていないようです。
- 1. セキュリティグループ仕様とのAWSフリー層インスタンスのポートの不一致
- 2. 不一致
- 3. 不一致レコード
- 4. ifelse |不一致
- 5. 不一致エラー
- 6. CFBundleShortVersionString不一致
- 7. 不一致が
- 8. 不一致
- 9. Parallel.ForEachの不一致
- 10. インラインブロックの不一致
- 11. トップレイアウトガイドの不一致
- 12. バージョンの不一致
- 13. レプリケーションの不一致
- 14. スカラリフトタイプの不一致?
- 15. Datepickerの不一致
- 16. シグネチャの不一致
- 17. マルチプロセスタイミングの不一致
- 18. 一致/不一致の一致/不一致の合計を基準に範囲を合計します。
- 19. 一般的な不一致
- 20. nHibernateコンポジットキークラスタイプ不一致
- 21. TSQLラウンド()不一致?
- 22. XSLT - 不一致タグ
- 23. ランタイムエラー13 - 不一致
- 24. 不一致削除
- 25. 型不一致エラー
- 26. (JavaFX)SplitPane.getDividerPositions()不一致
- 27. 不一致XRefストリームエントリサイズ
- 28. TensorFlowバージョン不一致
- 29. gcovのメモリー不足/バージョンの不一致?
- 30. ハスケルの不一致のブラケットエラー
また、 'typeof"は '' string ''であり、 'typeof []'は ''オブジェクト ''です(' '配列' 'は期待していますが、それでも問題ありません) – Halcyon
''は原始的であるが、オブジェクトである? –
興味深いのは、 "" "コンストラクタ=== String'です。 – pimvdb