ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript プリミティブは本当にオブジェクトですか?

JavaScript プリミティブは本当にオブジェクトですか?

Barbara Streisand
リリース: 2024-11-15 00:08:02
オリジナル
343 人が閲覧しました

Are JavaScript Primitives Truly Objects?

JavaScript オブジェクトの興味深い性質

プログラミングの奥深くでは、JavaScript の世界には予期せぬ展開が見られます。すべてがオブジェクトであるわけではありません。 。多くの入門書では「ほぼすべて」がこの分類に該当するとほのめかされていますが、詳しく調べると別の真実が明らかになります。

その中核では、オブジェクトはメソッドとプロパティを通じて機能をカプセル化します。たとえば、配列は、固有のキーと値のペアでこの型に適合します。ただし、「文字列」、「数値」、および「関数」になると、境界線がぼやけます。

これらのエンティティは、入力に対して変換を実行し、プロパティやプロパティに明確にアクセスせずに出力を生成する関数に似ているように見えるかもしれません。方法。このような場合、ドット表記は明らかに存在しないままです。

ラッパーの難題

謎を明らかにすると、微妙な違いが明らかになります。これらのプリミティブは、知られているように、物の本質。代わりに、それらはオブジェクトのガーメント、つまり String、Number、Boolean でラップされます。これらのラッパーはメソッドとプロパティを備えており、オブジェクトの動作を錯覚させます。

たとえば、次のコードを考えてみましょう。

var s = "foo";
var sub = s.substring(1, 2); // sub becomes "o"
ログイン後にコピー

舞台裏で、JavaScript は一連の隠れたステップを実行します。

  1. の String ラッパー オブジェクトを作成し、新しいものを効果的に適用しますString(s).
  2. 指定されたパラメータを使用してラッパー オブジェクトの substring() メソッドを実行します。
  3. String ラッパー オブジェクトを破棄します。
  4. 結果の文字列 (プリミティブ) を返します。 ) ステップ 2 から。

の錯覚プロパティ

プリミティブにはプロパティを割り当てることができるように見えますが、次の例で示すように、そのような試みは無駄であることがわかります。

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined
ログイン後にコピー

これは、プロパティが定義されているために発生します。一時的な String ラッパー オブジェクト。すぐに破棄され、プロパティがレンダリングされます。

関数: 変装したオブジェクト

プリミティブとは異なり、関数は Object を継承する本格的なオブジェクトです。これは、オブジェクトが独自のプロパティを持つ機能を含む、オブジェクトのすべての機能を備えていることを意味します。次の例を見てください:

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea
ログイン後にコピー

結論

JavaScript では、すべてがオブジェクトの外套を身につけるわけではありません。オブジェクト ラッパーによって偽装されたプリミティブは、オブジェクトの動作の錯覚を作成します。 JavaScript の複雑さをより深く理解することによってのみ、そのオブジェクトの本当の性質が明らかになります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート