JavaScriptに再入門しようと思った オブジェクト編

# 目次
[基本構文編](https://qiita.com/A_zara/items/42f895d82550e40c311c)
[オブジェクト編](https://qiita.com/A_zara/items/a2853de304e6334dc342)
[関数編](https://qiita.com/A_zara/private/c4f5c4c74e11d9607488)
# オブジェクト
　物の集合という認識は間違えではないが、概念説明において不足している点が多い。
　オブジェクトそのもの自体が一つのモノであり、そのモノに集まる動作や特性の集合体であり、オブジェクトというときはここの要素ではなくオブジェクトそのものが主役になる。
## インスタンス化
　配列のようにオブジェクトは参照型であるから、代入をした際に複数の動作でアクセスがあるとデータの競合が発生してしまいます。その際にオブジェクトのデータを保持したまま複製を生成します。

```javascript
//動的
var 変数名 = new オブジェクト名([引数 [...] ]);
変数名.プロパティ名[= 設定値];
変数名.メソッド名([引数 [...] ]);
//静的
オブジェクト名.プロパティ名[= 設定値];
オブジェクト名.メソッド名([引数 [...] ]);
```
## 組み込みオブジェクト
|オブジェクト名|提供|
|:--:|:--:|
|Object|オブジェクトのひな型機能|
|Array|配列を操作する手段|
|Map/WeakMap|連想配列を操作するための手段|
|Set/WeakSet|一意な集合の管理する手段|
|String|文字列型を操作するための手段|
|Number|数値型を操作する手段|
|Boolean|真偽値を操作するための手段|
|Function|関数を操作する手段|
|Symbol|シンボル操作する手段|
|Math|算術演算実行手段|
|Date|日時操作|
|RegExp|正規表現|
|Error/xxxError|error情報管理|
|Proxy|オブジェクトの挙動をカスタマイズする手段|
|Promise|非同期処理の実装手段|
これらのオブジェクトはJavaScriptにそのまま組み込まれているものでインスタンス化は意識せずに行われている。
### 例
#### String
```javascript
var str ='hello';
console.log(str.length);
```
これはStringオブジェクトのlengthメンバーを利用

|分類|メンバー名|概要|
|:--:|:--:|:--:|
|検索|indexOf (subStr, [start])|前方一致検索|
||lastIndexOf (subStr, [start])|後方一致検索|
||startsWith (search, [position])|startが一致するか|
||endsWith (search, [position])|末尾が一致|
||includes(search, [position])|内容が含まれているか|
|部分文字列|charAt(num)|文字列抽出(一文字)|
||slice(start,[end])|文字列抽出(区間)start > endの場合は空文字を返す また引数が負数の場合は後方から数える|
||substring(start, [end])|文字列抽出(区間)start > endの場合は入れ替えを行う また引数が負数の場合は0とする|
||substr(start, [cnt])|startからcnt文字分抽出|
||split(str,[limit])|分割文字strからlimit文の分割を行う|
|正規表現|match(reg)|正規表現の部分一致|
||replace(reg, rep)|正規表現で一致した個所を置き換え|
||search(reg)|正規表現を一致した際の位置|
|大文字小文字|toLowerCase()|小文字に変換|
||toUpperCase|大文字に変換|
|その他|concat(str)|文字列の後方に文字列strを連結|
||repeat(num)|文字列をnum回だけ繰り返したものを取得|
||trim()|文字列の前後から空白文字の削除|
||length|長さ取得|

#### Number
|メンバー名|概要|
|:--:|:--:|
|toString(rad)|進数変換|
|toExponential(dec)|指数形式変換(decは小数点以下の桁数)|
|toFixed(dec)|四捨五入(decの位になるように)|
|toPrecision(dec)|指定桁数変換(桁数不足分は0補完)|
|*isNaN(num)|NaNであるか|
|*isFinite(num)|有限値であるか判定|
|*isInteger(num)|整数値であるか|
|*isSafeInteger(num)|安全な整数値であるか|
|*parseFloat(str)|文字列を小数点に変換|
|*parseInt(str)|文字列を整数値変換|

#### シンボル
　生成時にユニークな値となり再生成ができない一見変わった性質を持っている。
　シンボルについて別途後でまとめる。

#### Math
数が多いため今後必要に応じてまとめるが、random(乱数)やsign(正負判定)、またpow(べき乗)、ceil(切り上げ)、floor(切り捨て)、round(四捨五入)が存在する。

#### array
|メンバー名|概要|
|:--:|:--:|
|length|配列数を図る|
|isArray|配列であるか|
|toString|配列の内容を" 1,2,3,4,5 "のような形式で返す|
|indexOf|配列に入っていた場合初めのキーを返す|
|lastIndexOf|indexOfを逆順にしたもの|
|entries|すべてのキー/値を取得|
|keys|すべてのキーを取得|
|values|値をすべて取得|
|concat()|配列の連結を返す|
|join(del)|配列内の要素をdelを挟み連結をする|
|slice(start,[end])|要素切り出し|
|splice(start, cnt, [rep ])|配列内のstart+1からcnt文の要素をrepで置き換える|
|from(start[, map [,othis] ])|配列ライクなオブジェクト、列挙可能なオブジェクトを配列に変換|
|of|可変長引数を配列に変換|
|copyWithin(target, start[,end])|start+1からtarget+1までをコピー|
|fill(val,[start,[end]])|指定しない場合はすべてを埋め、指定した場合はその範囲をvalで埋める|
|pop|スタックと同じで配列の後ろから吐き出す|
|push|スタックと同じでスタックの後ろに入れる。返り値が次の配列数|
|shift|先頭を取り出し削除|
|unshift|先頭に追加|
|reverse|並びを逆順に|
|sort|要素の昇順に|

コールバック系

|メンバー名|概要|
|:--:|:--:|
|forEach|配列内の要素を関数funcで処理|
|map|配列内の要素を関数ないで加工|
|every|すべての要素が関数のreturnに一致するか|
|some|いずれかの要素が関数のreturn一致するか|
|filter|条件関数に合致した要素で配列を再生成する|
|find|関数で初めにtrueになった要素を返す|
|findIndex|関数で初めにtrueになった要素番号を返す|
#### Map : 連想配列

|メンバー名|概要|
|:--:|:--:|
|size|要素数|
|set(key, val)|keyとvalをセットで追加|
|get(key)|指定したものを取得|
|has(key)|存在確認|
|delete(key)|削除|
|clear|すべて削除|
|keys|すべてのkeyを取得|
|values|すべてのvalueを取得|
|entries|すべてのkeyとvalueを取得|
|foEach(func , [that])|順繰りに関数で処理|

```javascript
let map = new Map();
map.set('name','Azara');
```

#### Set : 重複をしない値の配列
|メンバー名|概要|
|:--:|:--:|
|size|要素数|
|add(val)|valを追加|
|has(key)|存在確認|
|delete(key)|削除|
|clear|すべて削除|
|values|すべてのvalueを取得|
|entries|すべてのkeyとvalueを取得|
|foEach(func , [that])|順繰りに関数で処理|

#### RegExp
[正規表現に関してはこちら](https://qiita.com/A_zara/items/fbe0d28a7ccd9a2c594d)

|オプション|概要|
|:--:|:--:|
|g|文字列全体に対してマッチするか|
|i|大小文字識別|
|m|複数行に対応しているか|
|u|Unicode対応|
```javascript
var p = new RegExp('http(s)?://([\\w]+\\.)+(/[\\w-./?%$&=#]*)?', gi)
```
のような方法で正規表現を代入可能であり、通常の正規表現だいにゅいうも可能である。
- match
正規表現の入った変数で利用可能なメソッドで、比較した文字を引数に入れる。

#### objectオブジェクト
　objectのオブジェクトは全てのオブジェクトの雛形として共通的な性質や機能を提供するオブジェクト。
[詳しくはこちら](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object)
詳しく書くのはプロトタイプの時にします。

#### Globalオブジェクト
今までのオブジェクト異なり、このオブジェクトはグローバル変数やグローバル関数を管理するための便宜的なオブジェクト。
　グローバル変数や関数は他のオブジェクト配下に属さないトップレベルの変数/関数で、自分自身を定義することも可能。
　JavaScriptでいくつかのグローバル変数/関数をデフォルトで提供しています。

```javascript
変数名; //参照可能
関数名(引数); //使用可能
```
# 参考資料
学習に利用している本
[改訂新版JavaScript本格入門 ～モダンスタイルによる基礎から現場での応用まで](https://www.amazon.co.jp/dp/B01LYO6C1N/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
[mozilla](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object)