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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

376閲覧

Array.prototypeについて

YESYUKI17

総合スコア28

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2019/09/01 00:43

前提・実現したいこと

お世話になります。
以前、別の質問の回答にて配列ライクなオブジェクトに配列のメソッドを適用するコードを含んだ形で回答いただきました。
以下リンク
https://teratail.com/questions/207027

なんとか概ね回答を理解する事ができたのですが、1点疑問が残りましたのでアドバイスいただけると大変助かります。

該当のソースコード

window.addEventListener('DOMContentLoaded', ()=>{ [].forEach.call(document.querySelectorAll('.input'),x=>{ x.addEventListener('change',e=>{ var c=[].map.call(document.querySelectorAll('.input:checked'),x=>x.value); document.querySelector('.reflect').textContent=c.join(","); }); }); });

①[].forEach.callの部分ですが、色々勉強を進めていくうちにArray.prototype.forEach.callとほぼ同義と理解しました。しかし様々なサイトでは配列ライクなオブジェクトの変換には②Array.prototypeを用いる説明がほとんどでしたが、何か①と②のコードで決定的な違いなどあるのでしょうか?

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

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

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

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

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

guest

回答2

0

  • [].forEach.call()new Array を生成してから、Array.prototype.forEach を呼び出します。
  • Array.prototype.forEach.call()Array.prototype.forEach を直接呼び出すので、new Array のオブジェクト生成が発生しません。

[].forEach は速度を犠牲にショートコーディングする為のテクニックです。

Re: YESYUKI17 さん

投稿2019/09/01 01:17

think49

総合スコア18156

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

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

0

ベストアンサー

何か①と②のコードで決定的な違いなどあるのでしょうか?

特にありません。[]Arrayオブジェクトですし、リテラルで作ったばかりで固有のメソッドがあるわけでもないので、[].forEachArray.prototype.forEachがそのまま見えています。

  • []を使うメリット…コードが短い
  • []を使うデメリット…配列1つを生成する必要がある、セミコロンなしで書いていると前の行とつながって解釈されてしまう危険がある

投稿2019/09/01 00:48

maisumakun

総合スコア145121

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

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

YESYUKI17

2019/09/01 00:51

ありがとうございます。スッキリしました。
maisumakun

2019/09/01 00:53

よく使う場合には、「const forEach = Array.prototype.forEach;」のように変数に受けておいて、使うときは「forEach.call」とする、というような方法も考えられます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問