質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1258閲覧

Setオブジェクトの結果がリファレンスと相違してしまう

defeatist

総合スコア35

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/22 16:42

編集2020/08/23 02:57

JavaScriptのオブジェクトであるSetオブジェクトを勉強しようと思い、「Set - JavaScript | MDN」に載っている例を検証してみたのですが、console.log()の出力結果が相違してしまいます。

Set - JavaScript | MDN」での例

javascript

1var mySet = new Set(); 2 3mySet.add(1); // Set [ 1 ] 4mySet.add(5); // Set [ 1, 5 ] 5mySet.add(5); // Set [ 1, 5 ] 6mySet.add('some text'); // Set [ 1, 5, 'some text' ] 7var o = {a: 1, b: 2}; 8mySet.add(o); 9 10mySet.add({a: 1, b: 2}); // o is referencing a different object so this is okay 11 12mySet.has(1); // true 13mySet.has(3); // 3 は集合にないため、false 14mySet.has(5); // true 15mySet.has(Math.sqrt(25)); // true 16mySet.has('Some Text'.toLowerCase()); // true 17mySet.has(o); // true 18 19mySet.size; // 5 20 21mySet.delete(5); // 集合から 5 を削除 22mySet.has(5); // 5 が削除されているため false 23 24mySet.size; // 要素を 1 つ削除しているため 4 25console.log(mySet);// Set [ 1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2} ]

以下の実行環境で検証しました。

すると、[object Set] {}という出力がされてしまいました。

目的

  • この問題の原因が知りたい
  • リファレンス通りの出力が期待できる実行環境が知りたい

実行環境

Google Chrome バージョン: 84.0.4147.135(Official Build) (64 ビット)
Microsoft Windows10 バージョン1903(OSビルド 18362,1016)


よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/08/22 17:07

https://jsfiddle.net/30dqc45m/ ブラウザで確認されていますか?その場合どのOSでどのブラウザか、バージョンを含めて提示することをお勧めします。
退会済みユーザー

退会済みユーザー

2020/08/23 23:34

Windows 10Home 64bit Chrome バージョン: 84.0.4147.135(Official Build) (64 ビット)を使っています。 CodePen: Build, Test, and Discover Front-end Code. Web Maker JSFiddle - Code Playground 全ての環境でChrome開発者ツールのコンソール出力は一致してるように見えました。 確認手順を教えて下さい。
defeatist

2020/08/24 06:16

Chrome開発者ツールでは実行していません。 純粋にそれらのサイトの実行環境で例をコピペして実行しました。
退会済みユーザー

退会済みユーザー

2020/08/24 06:17

具体的に操作手順を記述してください。
defeatist

2020/08/28 02:08

ありがとうございます
guest

回答3

0

この問題の原因が知りたい
リファレンス通りの出力が期待できる実行環境が知りたい

原因
ご自身で記載されている通り、実行環境の違いによります。

  • console.log() の__オブジェクトの出力、展開時の表示__は実行環境で異なる。
  • プレイグラウンド系サービスは、ローカルで稼働するブラウザとは異なり、toString() された結果が表示されることが多い。

以下のように、交換用情報として利用できる JSON に変換すると環境に関係なく等しい結果になるはずです。

javascript

1console.log(JSON.stringify([...mySet.entries()])); 2// => [[1,1],["some text","some text"],[{"a":1,"b":2},{"a":1,"b":2}],[{"a":1,"b":2},{"a":1,"b":2}]] 3

期待できる実行環境

MDN の M(Mozilla) が意味する通り、Firefoxと考えるのが普通です。
Windows10 でしたら IE11, Edge の他に Firefox, Chrome をインストールしておくと、同一マシン上で比較確認できる体制を構築できます。

また、Web系開発する場合、各ブラウザのレンダリングエンジン等、違いを把握しておきましょう。
参考)qiita:Webブラウザ、レンダリングエンジン、JavaScriptエンジンを整理して図視化してみた

投稿2020/08/24 06:23

編集2020/08/24 06:34
AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defeatist

2020/08/28 02:08

ありがとうございます
guest

0

WebMakerのconsole.logに、Setオブジェクトの内容を展開して表示する機能がない(CodePenは試していないので分からないが)。

代わりに、あなたがforEachなどで表示してやればいい。

JavaScript

1mySet.forEach(function (x) { 2 console.log(x); 3})

WebMakerの新しいバージョン(Webアプリ版)だと、結果は以下のようになる。

result

11 2"some text" 3Object {a: 1, b: 2} 4Object {a: 1, b: 2}

投稿2020/08/23 02:44

編集2020/08/23 02:45
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defeatist

2020/08/28 02:09

ありがとうございます
guest

0

ベストアンサー

リファレンス通りの出力が期待できる実行環境が知りたい

普通に、ブラウザの開発者ツールのコンソールで。

この問題の原因が知りたい

コピペしてないのであれば、タイプミス。
もしくはそのサイトに何らかの制約があることの見落としか、サイトの使い方の間違い。

投稿2020/08/22 22:09

otn

総合スコア85764

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問