10

JSONの公式ドキュメントについて

オブジェクトは、名前と値のペアの順序付けられていないセットです。オブジェクトは{(左中括弧)で始まり、}(右中括弧)で終わります。各名前の後には:(コロン)が続き、名前と値のペアは、(コンマ)で区切られます。

私はJavascriptの初心者であり、JSON(Javascriptオブジェクト表記)という名前自体から、JavascriptのオブジェクトはJSONと同じであると想定していることに注意してください。間違えた場合に備えて訂正してください。

上記の定義から、Javascriptオブジェクトは、おそらくハッシュマップまたはBST、あるいは同様のデータ構造のいずれかによって実装されているようです。

しかし、ノードシェルにキーと値のペアを挿入すると、それらはシリアル化された方法で挿入されます。これは私がノードシェルで試したことです

> var a = {}
undefined
> a['k1'] = 'a1'
'a1'
> a['k3'] = 'a3'
'a3'
> a['k2'] = 'a2'
'a2'
> a['k4'] = 'a4'
'a4'
> a['k5'] = 'a5'
'a5'
> a
{ k1: 'a1',
  k3: 'a3',
  k2: 'a2',
  k4: 'a4',
  k5: 'a5' }

これで、印刷時aに、キーと値のペアが挿入と同じ順序で返されます。だから私の質問は:

  • キーの高速ルックアップを取得できますか?O(log(n))以上の複雑さを意味します。
  • JSONがBST、ハッシュマップ、または同様のDSのようなデータ構造を使用していない場合、JSONオブジェクトはどの程度正確にメモリの下に配置されますか?

OKを更新 します。では、Javascriptオブジェクトについてはどうでしょうか。誰かがJavascriptオブジェクトの基礎となる実装についてコメントできますか?

4

1 に答える 1

8

単純なデータ交換を可能にするテキストベースのシリアル化形式であるJSONと、プロパティの順序付けられていないリストであるプレーンなjavascriptオブジェクトを混同しています。

MDNが言ったように:

オブジェクトはプロパティのコレクションであり、プロパティは名前と値の間の関連付けです。プロパティの値は関数にすることができ、それはオブジェクトのメソッドとして知られています。

オブジェクトのプロパティは、順序付けされていないため、ハッシュマップとして表示できます。ただし、多くの場合、もう少し複雑です。オブジェクトがプロトタイプベースの場合、オブジェクトで見つからないプロパティは、ベースのプロトタイプを上向きに検索されます。

javascriptオブジェクトを使用すると、これが実装の重要な部分であるため、高速ルックアップが保証されます。しかし、実装は標準によって定義されておらず、各エンジンは独自のものを持つことができます。

アップデート

2021年にほぼすべてのブラウザとJSサーバーに搭載されているES6以降、オブジェクト内の非整数キーの順序は挿入順序です。

于 2012-12-29T13:18:31.110 に答える