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

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

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

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

Q&A

解決済

7回答

416閲覧

JavaScriptのオブジェクトについての理解

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2020/08/09 15:08

JavaScriptのオブジェクトについての質問があります。

他人のコードを見たときに、Number.NaNなどのまだ見たことのないオブジェクトに出会いました。その際はMDNで仕様を確認してどのようなものであるや仕様を確認できました。そのときオブジェクトというものは沢山の数があることを知りました。ただ、このオブジェクトを全て覚えるのは非現実的でもありますし、回答者の皆さんでも全てを完璧に覚えている方はいるかもしれませんが少数派なのではないかという疑問を感じました。

今まで見たことないものをDocを見て理解する。という工程に関してはその工程で良いかと思うのですが、以下の疑問が新たに生まれてきてしまいました。

なかなか説明が難しいので先程のNumber.NaNを例とすると、非数はNaNを返す。(詳細は割愛しています)という便利なオブジェクトなのですがこのオブジェクトの存在自体知らなければ、自身でif文等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?

よく使うと言っては曖昧な表現ですがよく使うオブジェクト一覧の様なものがあるのでしょうか?
曖昧な質問で申し訳ありませんが教えていただければ幸いです。

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

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

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

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

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

guest

回答7

0

私の個人的なやり方なので、参考にならないかもですが、
私は日々、
MDN見たり、オブジェクトや変数を、
console.logもしくはconsole.dirでログに出し、
メソッドやプロパティの存在を確認して研究しています。
たまに、いろんな記事や、teratailでの質問や回答で、自身が知らない物が出てきたときは、
調べたり、MDNを見て調査をした上で、便利なものは、すぐ自分で使ってみて、
忘れないようにしています。

あとは、いくつかの言語を経験していると、
いわゆるプログラムで必ずある仕様や形式というものがわかってきますので、
こういったもんは必ずある、と、機能面で探すこともあります。

自身でif文等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?

基本的には、最適化された方法でなくても動くことは動くので、
リファクタリングの時間がない限りは基本的に直しません。
まぁ、ただ、既存で動いているものでも、
趣味程度に、または、リソースが取れるなら直すことはあります。
(もちろん大きなものは、周りに相談し、直したあと十分テストをした上で)
ただし、ブラウザ動作のJavaScriptの場合、クロスブラウジングの必要があるので、
直すときは、どうか十分気をつけられるといいかと。
(特にターゲットにIEが絡む時は要注意)

投稿2020/08/09 19:15

miyabi_takatsuk

総合スコア9528

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

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

0

「こういうオブジェクトがあるはずだ」「こういうメソッドがあるはずだ」と思ってリファレンスの中を探しますね。あるいはググるか。

NaNについて言えば、浮動小数点形式についての知識があれば存在が予想できます。

あるいは、リファレンスを一度通読しておくと(細かく理解する必要は無い)、詳細や名前すら忘れても「こういう機能がなんかあった気がする」というのが浮かびますので、それから探し始めます。

投稿2020/08/09 15:40

otn

総合スコア84555

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

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

0

ベストアンサー

そもそも論ですが、Number.NaNnumber型の値であって、オブジェクトではありません

そして、(あえてNaNへ代入するような妙なことをしない限り)NaNとだけ書いても同じ値ですので、「Number.NaNでないと困る」ような場面は、ほぼ現れません。

投稿2020/08/11 06:20

maisumakun

総合スコア145184

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

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

0

オブジェクトについての理解

要は抽象化された「一連の処理群(特化された処理単位)」という感覚で捉えています
(厳密には異なりますので、多方面からお叱りを受けますけど)。
オブジェクトが担っている処理を俯瞰して、公開されるメンバ(プロパティ、メソッド)は全て一纏めで覚えています。

皆さんはどの様にされているのでしょうか?

新しい実装を探すときは、miyabi_takatsuk さんが回答されたように console.logconsole.dir を活用して、ベンダプレフィックス付きのオブジェクトを探っています。それ以外の実装されて久しいものは、主にMDNで確認しています(たとえば 「MDN Number」で検索)。

  1. 初見 ... 何も知らなければ使いこなせない
  2. 失念 ... 使ったことはあっても、再利用時に自信がないなら「所見」と同じ。
  3. 実装変更の懸念 ... 結局、覚えていても確認することが多い。

なんというか、確認作業に理由をつけています。


MDN をPCブラウザで閲覧すると、説明ページでは左側のナビゲーションに「関連トピック」として、オブジェクトのメンバが案内されているので、表記からどのように使えるものなのかを判断しています。

主にプロパティとメソッドを確認し、prototype表記の有無でスタティックにアクセスするものか?インスタンス生成して使えるようになるのか?を見分けています。

  1. プロパティ

1.1. ObjectName.PROP_NAME
1.2. ObjectName.prototype.propName
2. メソッド
2.1. ObjectName.methodName()
2.3. ObjectName.prototype.methodName()
3. イベント
(割愛)

Number.NaN のページも同様です。

NEGATIVE_INFINITYPOSITIVE_INFINITY など、他にも 特殊な数を表すスタティックな定数が定められていますし、ご質問の NaN を if 文の条件式に使えそうなメソッドも見つかります。

  1. Number.isFinite() JavaScriptに元々あった(window にも expose されており、Number.を省略できる)。
  2. Number.isNaN() ES5 で追加された(window にも expose されており、Number.を省略できる)。

よく使うオブジェクト一覧

MDN を確認中であれば、ページに用意されている「パンくずリスト」を素直に泳いでいます。

JavaScript リファレンス まで遡ると、一覧にたどり着くのではないでしょうか。

投稿2020/08/09 22:27

編集2020/08/09 22:33
AkitoshiManabe

総合スコア5432

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

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

0

なかなか説明が難しいので先程のNumber.NaNを例とすると、非数はNaNを返す。(詳細は割愛しています)という便利なオブジェクトなのですがこのオブジェクトの存在自体知らなければ、自身でif文等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?

知らなければどうしようもないという事は普通にあります。
これを事前にすべて知ってから対応しようというのは時間的に技術的にも不可能です。
現実的には、問題に出会った時に調べて対応するという事の繰り返しになります。
結局それしかないし、逃げ道はありません。
できるのはせいぜい自分用メモに記録しておく事くらいです。
(EvernoteでもいいしRedmine、あるいはブログかもしれません。
フリーワードでいつでも探せるのが大事)。
私はもうおっさんなので、20年くらいプログラミングを仕事にさせてもらってるんですが、
いまだに新しく触る言語だとよく分からない事があり、ググって調べて実際に自分でコードをで試しての繰り返しです。
特に言語だけでなく、現実的にはフレームワークを使う事になるので、言語に加えてフレームワーク特有の命令や実装方法を学ぶ必要があるし、すべてを覚える事は不可能です。
なので、リファレンスのURLとか、よく使う実装の手順や実装パターンなどをまとめておいて、フリーワードで検索できるようにしてます。

自分の場合、これは後で忘れそうだし、記録しておかないと困るなという事に関しては
自分用のRedmineにまとめています。
毎回Google検索するのも面倒ですし、参考にした記事だけでは言葉足らずだったり、
自分がつまづきやすいところと他人がつまづくところが微妙に違ったりする場合もあるので、
自分専用のメモが必要になる事があります。

よく使うと言っては曖昧な表現ですがよく使うオブジェクト一覧の様なものがあるのでしょうか?

曖昧な質問で申し訳ありませんが教えていただければ幸いです。

JavaScriptに限らず特定の言語やフレームワークでプログラミングしていると、よく使うメソッドやオブジェクトはあります。
そしてその仕様については全部を最初から把握しようというのは無理なのでやめたほうが良いです。
とにかくプログラミングしていく中で何度も出会うものについては覚えたほうが良いですが、
全てを覚えておくのは無理です。
何度も忘れてしまう、使い方が覚えられないようなものは、使い方を自分用メモで取っておき、
いつでも参照できるようにしておくのがおすすめです。
趣味だとわかりませんけど、仕事でやる場合は一定期間は1日8時間(定時までの時間)は同じ言語、同じフレームワークを触るので、さすがによく使う命令は覚えます。
ただ、プロジェクトが変わって別の言語+フレームワークになったり、また元の言語に戻ったりしちゃうと
忘れてしまう事が多いです。
なので、自分が忘れてしまう、間違いやすいところをピンポイントに抑えた自分用メモが大事かなって思います。
期間が空いても忘れない事もあるんですが、人によって覚えている事は異なるので、
自分用メモが大事と言っています。

結論としては以下です。

  • リファレンスを調べる、Google検索するというルーチンはもう避けようがないのであきらめて実践する
  • 自分専用のメモを取る

(すべての知識を覚えておく事は不可能なので、忘れても後で振り替えれるように知識のインデックスを作る)

  • 暗記は諦める。必要に応じて自分のメモを見る

あくまでも自分の経験談ですが、参考になれば幸いです。
長文失礼しました。

投稿2020/08/09 15:49

mingos

総合スコア4025

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

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

0

経験ですかね...
たくさん書いて、たくさん検索して、たくさん間違いもして、
ようやく正解がわかってくるというかなんというか。

プログラミングってある程度職人芸だと思うのですが、それはたくさんの実践をこなしてきたから得られるものだと感じたりもします。

isNaN と Number.isNaN の違いは、
以前からJavaScriptを触っていて問題だなと思っている人にはある程度有名なことですかね。

その言語に精通して研ぎ澄まされた感覚を身に着けてきたら、そういうのが気にならなくなったりします。

暗記すべきでもないものは適当にリファレンスよみますが、
なんとなく、これはああだったよなあ、と細かい所は忘れても大まかなところを覚えてたりとかですかね。

投稿2020/08/09 15:55

standard-soft

総合スコア197

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

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

0

本当によく使うものは覚えるしかないのではないでしょうか。
とはいっても、NaNなどを直接使うことはあまり無い気がしますが(むしろ、NaNでないか判定する用途ならisNaNを使うでしょう)

私について言えば、まだ知らないものも結構あるかもしれませんが、MDNなどは頻繁に読んでいます。新しい機能の追加についていくためです。
しかし、最低限必要なものを作るのが目的なら、知るべきことは最低限でいいでしょう。例えばProxyは便利ですが、別に使わなくても開発できます。

たいていの場合、やりたいことがあるならそれに関連する検索ワードで調べればやり方はすぐに見つかるはずです。

投稿2020/08/09 15:46

magf

総合スコア212

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

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

magf

2020/08/09 15:48

あとは、他の人のコードを読むと知らないことがわかったりするので、たくさん読むようにしましょう。 私も、そうやって知った知識がたくさんあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問