Javascriptを勉強中の初心者です。
以下はfor...in文を使ってオブジェクトに含まれるプロパティを
順に取り出して出力するスクリプトです。
var personal = {
name:'山田',
old:20,
address:'北海道',
email:'yamada@example.com'
}
document.write("<p>");
for(var pname in personal){
document.write(pname + " : " + personal[pname] + "<br />");
}
document.write("</p>");
参考書には、for...in文の注意点として
『どのような順序でプロパティが取り出されるか
決まっていないし指定もできない』と書いてありました。
しかし何度実行してもオブジェクト personal で
指定したどおりの順序(name、old、address、email)で出力されます。
どのプロパティから取り出されるか決まっていないのであれば
出力結果の順序がバラバラになるはずなのでは?
私が意味を取り違えているのでしょうか。
お詳しい方、どなたか理由を教えてください。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
ECMAScriptの仕様では定められていないということです。
しかし、長い歴史の中でデファクトスタンダードができて、各環境も大体それに添っています。
ただし、その通りでない(バラバラな順序で返す)環境があっても文句は言えないよということです。
ここで提案されているものがデファクトスタンダードです。
http://wiki.ecmascript.org/doku.php?id=strawman: …
要は、配列のインデックスとなる0から4294967295までの整数キーを先に数値順に列挙して、
その後は加えられた順に列挙するというものです。
ただし、まだ正式な仕様にはなっていませんし、現状各環境で微妙なズレがあるので、過信は禁物です。
もしも順序が保証されるテーブルが欲しい時はMapを使ってください。
http://people.mozilla.org/~jorendorff/es6-draft. …
こちらはキッチリ挿入順に列挙できます。
回答していただきありがとうございました!
大方の標準というものがありそれに沿っているが
絶対ではないのですね。
その標準を確認する術があることを知り勉強になりました。
No.2
- 回答日時:
ECMAScript 5 では for-in の順序に規定はありませんが、同じ環境(OS/ブラウザ/ブラウザバージョン等が一致)で for-in を実行すれば、同じ順序で出力されます。
しかしながら、ブラウザAとブラウザBでは別の順序で出力される可能性があります。
つまり、ECMAScript 5 を実装する全てのブラウザで同じ順序で出力される保証はありませんし、同じブラウザでもバージョンによって順序が異なるかもしれません。
どうしても、オブジェクトのkey順序を整列させたいのなら、Object.keys.sort() でソートすれば良いですが、それなら初めから配列で定義するほうが筋が良いと私は思います。
# Re: lade0225
No.1
- 回答日時:
>どのプロパティから取り出されるか決まっていないのであれば
>出力結果の順序がバラバラになるはずなのでは?
単純に取り出す順序は特定の手順を用いても常に一定を「保障されない」ということです。
「必ずしも同じではない」ということは、「必ずバラバラになる」と同意ではありません。
保障されていないものを個人の思い込みで、n番目に抽出されるデータの
プロパティがxだと、勝手に決め込んでコーディングをすると痛い目にあうよ
ということだけなので、どうしても順序が重要な場合は配列を使ったり、
ソート用のキーを用意するなど運用でカバーする必要があります
早速回答していただき、ありがとうございました。
>「必ずしも同じではない」ということは、「必ずバラバラになる」と同意ではありません。
「必ずバラバラになる」と勘違いしていましたが、正しく理解できました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Gmail チャットGPTの登録ができない 1 2023/03/07 02:43
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- JavaScript gasについて 1 2022/05/31 21:51
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- Ruby vscode 文字化け 1 2022/05/21 19:17
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- 英語 一般を表す言葉を補って能動態で受動態を書き換える 5 2022/08/14 16:13
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面間でのJavaScrip...
-
Webページ中の javascript をVB...
-
タブブラウザで focus() を実...
-
ローカルのレジストリを読みたい
-
JavaScriptの仕様(ECMA-262以外)
-
javaScriptでグローバル変数に...
-
CSSのクラスを動的に変更 classで
-
JavaScriptで ブラウザの閉じる...
-
jqGridの入力内容をサーバに保...
-
javascript 文字列の最後から1...
-
一定時間ごとの実行
-
VB.NET2003 テキストボックスに...
-
Excel VBA にて JavaScript の...
-
【JavaScript】ソースのコメン...
-
confirm()をはい/いいえ に切...
-
ラベルの色がかわってくれない
-
Vba SelStart、SelLen教えてく...
-
時間稼ぎの命令文とは?
-
alert()が実行できない
-
JavaScriptでショートカットキ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
jquery か javascript で json ...
-
エクセル2010のvbaについて
-
javaScriptでグローバル変数に...
-
画面間でのJavaScrip...
-
文字を移動させその位置を表示...
-
フォルダ内のファイル名を取得...
-
オライリーのプログラミングPHP...
-
ASP.NETでURLにマッピングされ...
-
CSSのクラスを動的に変更 classで
-
イベントevt?evt.target:event....
-
一定時間経つと画像を消す方法
-
クラス デフォルトプロパティの...
-
event.srcElementの動的設定
-
「リンク」と「ハイパーリンク...
-
VBAの引数の指定 カッコとイコ...
-
strictモードでなぜエラーにな...
-
JSの「document.getElementById...
-
Shell.ApplicationでのIEオブ...
おすすめ情報