JavaScriptのオブジェクトについての質問があります。
他人のコードを見たときに、Number.NaN
などのまだ見たことのないオブジェクトに出会いました。その際はMDNで仕様を確認してどのようなものであるや仕様を確認できました。そのときオブジェクトというものは沢山の数があることを知りました。ただ、このオブジェクトを全て覚えるのは非現実的でもありますし、回答者の皆さんでも全てを完璧に覚えている方はいるかもしれませんが少数派なのではないかという疑問を感じました。
今まで見たことないものをDocを見て理解する。という工程に関してはその工程で良いかと思うのですが、以下の疑問が新たに生まれてきてしまいました。
なかなか説明が難しいので先程のNumber.NaN
を例とすると、非数はNaN
を返す。(詳細は割愛しています)という便利なオブジェクトなのですがこのオブジェクトの存在自体知らなければ、自身でif文
等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?
よく使うと言っては曖昧な表現ですがよく使うオブジェクト一覧の様なものがあるのでしょうか?
曖昧な質問で申し訳ありませんが教えていただければ幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
私の個人的なやり方なので、参考にならないかもですが、
私は日々、
MDN見たり、オブジェクトや変数を、
console.log
もしくはconsole.dir
でログに出し、
メソッドやプロパティの存在を確認して研究しています。
たまに、いろんな記事や、teratailでの質問や回答で、自身が知らない物が出てきたときは、
調べたり、MDNを見て調査をした上で、便利なものは、すぐ自分で使ってみて、
忘れないようにしています。
あとは、いくつかの言語を経験していると、
いわゆるプログラムで必ずある仕様や形式というものがわかってきますので、
こういったもんは必ずある、と、機能面で探すこともあります。
自身でif文等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?
基本的には、最適化された方法でなくても動くことは動くので、
リファクタリングの時間がない限りは基本的に直しません。
まぁ、ただ、既存で動いているものでも、
趣味程度に、または、リソースが取れるなら直すことはあります。
(もちろん大きなものは、周りに相談し、直したあと十分テストをした上で)
ただし、ブラウザ動作のJavaScriptの場合、クロスブラウジングの必要があるので、
直すときは、どうか十分気をつけられるといいかと。
(特にターゲットにIEが絡む時は要注意)
投稿2020/08/09 19:15
総合スコア9555
0
ベストアンサー
そもそも論ですが、Number.NaN
はnumber
型の値であって、オブジェクトではありません。
そして、(あえてNaN
へ代入するような妙なことをしない限り)NaN
とだけ書いても同じ値ですので、「Number.NaN
でないと困る」ような場面は、ほぼ現れません。
投稿2020/08/11 06:20
総合スコア146018
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
オブジェクトについての理解
要は抽象化された「一連の処理群(特化された処理単位)」という感覚で捉えています
(厳密には異なりますので、多方面からお叱りを受けますけど)。
オブジェクトが担っている処理を俯瞰して、公開されるメンバ(プロパティ、メソッド)は全て一纏めで覚えています。
皆さんはどの様にされているのでしょうか?
新しい実装を探すときは、miyabi_takatsuk さんが回答されたように console.log
、console.dir
を活用して、ベンダプレフィックス付きのオブジェクトを探っています。それ以外の実装されて久しいものは、主にMDNで確認しています(たとえば 「MDN Number」で検索)。
- 初見 ... 何も知らなければ使いこなせない
- 失念 ... 使ったことはあっても、再利用時に自信がないなら「所見」と同じ。
- 実装変更の懸念 ... 結局、覚えていても確認することが多い。
なんというか、確認作業に理由をつけています。
MDN をPCブラウザで閲覧すると、説明ページでは左側のナビゲーションに「関連トピック」として、オブジェクトのメンバが案内されているので、表記からどのように使えるものなのかを判断しています。
主にプロパティとメソッドを確認し、prototype
表記の有無でスタティックにアクセスするものか?インスタンス生成して使えるようになるのか?を見分けています。
- プロパティ
1.1. ObjectName.PROP_NAME
1.2. ObjectName.prototype.propName
2. メソッド
2.1. ObjectName.methodName()
2.3. ObjectName.prototype.methodName()
3. イベント
(割愛)
Number.NaN のページも同様です。
NEGATIVE_INFINITY
や POSITIVE_INFINITY
など、他にも 特殊な数を表すスタティックな定数が定められていますし、ご質問の NaN
を if 文の条件式に使えそうなメソッドも見つかります。
- Number.isFinite() JavaScriptに元々あった(window にも expose されており、
Number.
を省略できる)。 - Number.isNaN() ES5 で追加された(window にも expose されており、
Number.
を省略できる)。
よく使うオブジェクト一覧
MDN を確認中であれば、ページに用意されている「パンくずリスト」を素直に泳いでいます。
JavaScript リファレンス まで遡ると、一覧にたどり着くのではないでしょうか。
投稿2020/08/09 22:27
編集2020/08/09 22:33総合スコア5434
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
なかなか説明が難しいので先程のNumber.NaNを例とすると、非数はNaNを返す。(詳細は割愛しています)という便利なオブジェクトなのですがこのオブジェクトの存在自体知らなければ、自身でif文等で条件分岐して自作してしまう場合も出てきてしまうと思います。そこで皆さんはどの様にされているのでしょうか?
知らなければどうしようもないという事は普通にあります。
これを事前にすべて知ってから対応しようというのは時間的に技術的にも不可能です。
現実的には、問題に出会った時に調べて対応するという事の繰り返しになります。
結局それしかないし、逃げ道はありません。
できるのはせいぜい自分用メモに記録しておく事くらいです。
(EvernoteでもいいしRedmine、あるいはブログかもしれません。
フリーワードでいつでも探せるのが大事)。
私はもうおっさんなので、20年くらいプログラミングを仕事にさせてもらってるんですが、
いまだに新しく触る言語だとよく分からない事があり、ググって調べて実際に自分でコードをで試しての繰り返しです。
特に言語だけでなく、現実的にはフレームワークを使う事になるので、言語に加えてフレームワーク特有の命令や実装方法を学ぶ必要があるし、すべてを覚える事は不可能です。
なので、リファレンスのURLとか、よく使う実装の手順や実装パターンなどをまとめておいて、フリーワードで検索できるようにしてます。
自分の場合、これは後で忘れそうだし、記録しておかないと困るなという事に関しては
自分用のRedmineにまとめています。
毎回Google検索するのも面倒ですし、参考にした記事だけでは言葉足らずだったり、
自分がつまづきやすいところと他人がつまづくところが微妙に違ったりする場合もあるので、
自分専用のメモが必要になる事があります。
よく使うと言っては曖昧な表現ですがよく使うオブジェクト一覧の様なものがあるのでしょうか?
曖昧な質問で申し訳ありませんが教えていただければ幸いです。
JavaScriptに限らず特定の言語やフレームワークでプログラミングしていると、よく使うメソッドやオブジェクトはあります。
そしてその仕様については全部を最初から把握しようというのは無理なのでやめたほうが良いです。
とにかくプログラミングしていく中で何度も出会うものについては覚えたほうが良いですが、
全てを覚えておくのは無理です。
何度も忘れてしまう、使い方が覚えられないようなものは、使い方を自分用メモで取っておき、
いつでも参照できるようにしておくのがおすすめです。
趣味だとわかりませんけど、仕事でやる場合は一定期間は1日8時間(定時までの時間)は同じ言語、同じフレームワークを触るので、さすがによく使う命令は覚えます。
ただ、プロジェクトが変わって別の言語+フレームワークになったり、また元の言語に戻ったりしちゃうと
忘れてしまう事が多いです。
なので、自分が忘れてしまう、間違いやすいところをピンポイントに抑えた自分用メモが大事かなって思います。
期間が空いても忘れない事もあるんですが、人によって覚えている事は異なるので、
自分用メモが大事と言っています。
結論としては以下です。
- リファレンスを調べる、Google検索するというルーチンはもう避けようがないのであきらめて実践する
- 自分専用のメモを取る
(すべての知識を覚えておく事は不可能なので、忘れても後で振り替えれるように知識のインデックスを作る)
- 暗記は諦める。必要に応じて自分のメモを見る
あくまでも自分の経験談ですが、参考になれば幸いです。
長文失礼しました。
投稿2020/08/09 15:49
総合スコア4207
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
経験ですかね...
たくさん書いて、たくさん検索して、たくさん間違いもして、
ようやく正解がわかってくるというかなんというか。
プログラミングってある程度職人芸だと思うのですが、それはたくさんの実践をこなしてきたから得られるものだと感じたりもします。
isNaN と Number.isNaN の違いは、
以前からJavaScriptを触っていて問題だなと思っている人にはある程度有名なことですかね。
その言語に精通して研ぎ澄まされた感覚を身に着けてきたら、そういうのが気にならなくなったりします。
暗記すべきでもないものは適当にリファレンスよみますが、
なんとなく、これはああだったよなあ、と細かい所は忘れても大まかなところを覚えてたりとかですかね。
投稿2020/08/09 15:55
総合スコア197
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
本当によく使うものは覚えるしかないのではないでしょうか。
とはいっても、NaN
などを直接使うことはあまり無い気がしますが(むしろ、NaN
でないか判定する用途ならisNaN
を使うでしょう)
私について言えば、まだ知らないものも結構あるかもしれませんが、MDNなどは頻繁に読んでいます。新しい機能の追加についていくためです。
しかし、最低限必要なものを作るのが目的なら、知るべきことは最低限でいいでしょう。例えばProxy
は便利ですが、別に使わなくても開発できます。
たいていの場合、やりたいことがあるならそれに関連する検索ワードで調べればやり方はすぐに見つかるはずです。
投稿2020/08/09 15:46
総合スコア212
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。