jsの自分用記録2017-02-03


# オブジェクトとは

オブジェクトとは、オブジェクトの名前を用いてアクセスできる、要は連想配列（ハッシュ）です。オブジェクトには主にプロパティとメソッドが入っています。プロパティというのは値のことを指します。メソッドというの一連の処理のことで、関数です。なので、オブジェクトに入るのは値もしくは関数だと言っても大丈夫でしょう。自動車で例えるなら、タイヤやハンドルや車そのものは値でありポロパティで、「ガソリンを入れてアクセルを踏んだらエンジンが走る」という処理が関数、メソッドです。

# オブジェクトを利用する New 演算子

new演算子を使うことで、オブジェクトをインスタンス化することができます。なぜ、オブジェクトをインスタンス化しなければいけないのでしょうか？それには理由があります。例えば、複数のアプリから一つのオブジェウトに対して同時に書き込みをしてしまったらコンフリクトが起こりますよね。オブジェクトをインスタンス化するというのは、自分の領域にオブジェクトの複製を作るという考え方をするのが良いと思います。

```

var Object {key:hoge, key:piyo};

var  InstantiationObject = new Object(引数名);

```

上記のように連想配列をインスタンス化することができます。newを使ってインスタンス化したオブジェクトは変数に代入され、オブジェクトをインスタンス化すると生成されたオブジェクトはインスタンスになり、インスタンスが代入されたオブジェクトはインスタンス変数になります。オブジェクト変数とも言います。インスタンスを使うのには、ドット演算子を使います。


```
InstantiationObject.Object(引数,引数,引数);
```

# 静的なプロパティとメソッド

静的なオブジェクトとは、インスタンス化しなくても利用できるオブジェクトです。

```

オブジェクト名.メソッド名

```


で利用することができて、インスタンス化変数でアクセスする必要はありません。

# 組み込みオブジェクト

組み込みオブジェクトとはjavascriptにもとからるオブジェクトです。

```js

 vat false = 'false';
 
```
 
```js


 var false = new boolean(false);
 
 javascriptはnull以外全部trueとみなしてしまう。
 
 ```

```js
var a = new string('hello');

```


```js

var a = 'hello'


console.log(a.lenght)




var a = new boolean (false)

if(a){

console.log('true')

}

```


基本データ型をnew演算子を使ってインスタンス化するのは原則として避ける



# ラッパーオブジェクト

ラッパーオブジェクトとは、基本的なデータ型をあらかじめオブジェクトとして包んで提供されているものです。



# 基本データを扱うためのオブジェクト

Stringオブジェクトは、文字列を扱うためのラッパーオブジェクトです。Stringオブジェクトで利用可能な主なメンバーはStringオブジェクトで利用可能なオブジェクトは主なメンバーは以下の通りです。






```js

var str = 'にわにはにわにわとりがいる';

console.log(str.length);
console.log(str.);
console.log(str.lastIndexOf('にわ'));
console.log(str.indexOf('ガーデン'));//不一致
console.log(str.startsWith('にわ'));
console.log(str.endsWith('str'));
console.log(str.includes('に'));
console.log(str.charAt(3));
console.log(str.substring(5, 8));
//
console.log(str.substr(4,8));

//splitは文字列を配列として抽出できる
//しかも分割もできる
console.log(str.split('り'));
//["にわにはにわにわと", "がいる"]
console.log(str.match('a'));
//正規表現に対する文字列のマッチングの際に、そのマッチ結果を得るために使われます



```




# サロゲートペア


抽象文字は、文字列の中に、抽象表記や入力表記を含む文字列です。抽象文字を計算機上で扱うためには、符号化する必要がある。Unicodeでは、文字の符号化のために使用できる整数の範囲をコード空間と読んでいる。そして、そのコードに属する値をコードポイントt呼ばれている。

符号化文字と文字符号形式

Unicode文字にはそれぞれコードポイントが与えられているわけであるが、そのコーヂポイントを計算機上でどのように表現するか、という意味でさらにふごうかする

16ビット符号単位の組みによる単一の中傷もじの表現である。

http://qiita.com/YusukeHirao/items/2f0fb8d5bbb981101be0

もともと、unicodeは2バイトなのですが、だんだん文字が増えていくことに連れて、にバイトでは表現することができないので、四バイトで表現するようになりました。この、４バイトで表現されている文字がサロゲートペアです。でも、lengthプロパティはサロゲートを認識できないので、二文字としてカウントしてしまうのです、




# ナンバーオブジェクト


Nnmberオブジェクトは、数値型を扱うラッパーオブジェクトで、数値を整形するための機能を提供しています。numberオブジェクトの定数。NaNはいずれも特殊な数値です。

ある計算結果がJavascriptでの処理の限界値を超えた時に、無限大は、表現されます。＾


NaNは不思議な数値で、自分自身を含む全ての数値と等しくないという性質を持ちます。よって、以下の比較をしてもFalseを返します。

だから、何を比較してもFalseが返ってきます

```js

console.log(Number.NaN === Number.NaN); //false
console.log(1 === Number.NaN); //false

```

# 数値形式を変換するtoXxxxxxメソッド


```

var numb = 255;

console.log(numb.toString(16));

```

# 文字列を数値に変換する

Javascriptはデータ型に寛容な言語です。なので、数字に文字を代入しても大丈夫ですしその都度数字は数字に変換s荒れますし、ときに文字に自動的に変換されます。でも、逆にそれがバグの温床になったりすることもあります。そういうことを防ぐために、与えられた値を数値に変換するメソッtどが存在します。それがparseメソッド


```js

var n = '1234';
console.log(Number(n));


var n = '1234v';
console.log(Number(n));
console.log()

var d = new Date();

console.log(Number(d));

console.log(typeof(123 - '')); //数値に変わる
console.log(typeof(123 + '')); //Stringに変わる

```


# 論理型への変換

この説明がよくわからない、!!で論理型に変換できるのはわかったけれど、1回めの!でオペランドとしての倫理型を要求することを利用して！！で二重に値を反転させているわけです。



```js



var i = 123

console.log(!!i);


console.log(i);


```

# Symboleを作成する

ES2015では、String Number Booleanなどの方に加えて、新たにSymbolという型が追加されました。Symbolというのは、モノの名前のことです。

```js

var sym1 = Symbol('sym');
var sym2 = Symbol('sym2');


conosole.log(typeof(sym1))


```

シンボルを生成するのはSymbol命令です、コンストラクターにも似ていますが、

引数はシンボルの説明です

var hoge = Symbol('説明');