ホームページ >ウェブフロントエンド >jsチュートリアル >文字列と数値は本当に JavaScript のオブジェクトですか?

文字列と数値は本当に JavaScript のオブジェクトですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 02:38:02753ブラウズ

Are Strings and Numbers Really Objects in JavaScript?

JavaScript オブジェクトの謎を解読する

JavaScript の領域では、オブジェクトの遍在性がしばしば疑問を引き起こします。配列と関数はオブジェクトのような動作を示しますが、「文字列」と「数値」の謎めいた性質を解明することは複雑になる可能性があります。

プリミティブ値のとらえどころのない性質

一般に信じられていることに反して、JavaScript のすべてがオブジェクトであるわけではありません。文字列、数値、ブール値などのコア要素は、不変の性質を特徴とするプリミティブとして分類されます。真のオブジェクトとは異なり、プリミティブにはメソッドやプロパティがありません。

オブジェクト性の幻想

JavaScript は、プリミティブをオブジェクトのように見せる巧妙なトリックを採用しています。プリミティブのプロパティ (例: s.substring(1, 2)) にアクセスしようとすると、JavaScript は必要なメソッドを保持するラッパー オブジェクト (例: String(s)) をシームレスに作成します。ただし、このラッパーは存続期間が短く、メソッドの実行が完了するとすぐに消えます。

証明: 到達不可能なプロパティ

この錯覚は、プロパティをプリミティブに割り当てるときに明らかになります。 、最終的には無駄であることがわかります。次のコードを考えてみましょう。

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined

プリミティブ にプロパティを割り当てているにもかかわらず、それを取得しようとすると、未定義が返されます。これは、プロパティが一時的なラッパー オブジェクトにアタッチされており、メソッドの完了時に破棄されるためです。

関数: True オブジェクト

プリミティブとは対照的に、JavaScript 関数はオブジェクト プロトタイプから継承した正当なオブジェクト。これにより、プロパティを所有し、オブジェクトベースのメソッドを実行できるようになります。

関数でのプロパティの割り当て

関数は典型的なオブジェクトとして機能し、プロパティの割り当てと取得が可能になります。 :

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea

JavaScript におけるプリミティブと正当なオブジェクトの区別を理解することで、 「ほぼすべてのものはオブジェクトである」という広く普及した概念を取り巻く混乱を払拭します。

以上が文字列と数値は本当に JavaScript のオブジェクトですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。