0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(Javascript) 組み込みオブジェクトとnew演算子によるインスタンス化

Posted at

#はじめに
今回は、Javascriptの"超基本"
オブジェクト指向をテーマに 組み込みオブジェクトとnew演算子によるインスタンス化 について記録します。

過去に2点ブジェクトについて、記事を投稿しました。

(Javascript) オブジェクト指向 と オブジェクト&配列 の違い
(Javascript) インスタンス化 と コンストラクター
(Javascript) 静的プロパティと静的メソッド

#組み込みオブジェクト とは
javascriptが公開しているオブジェクトのことです。
その中でも基本が 組み込みオブジェクト (Built-in Object) になります。
また 組み込み の意味は javascriptで標準に組み込まれた というモノです。

##特徴
ブラウザーオブジェクト が 特定の環境でしか動かないことに対して 組み込みオブジェクトはjavascriptが動作する全ての環境で利用できることが、特徴です。
・組み込みオブジェクトは、自分でオブジェクトを定義できますが、特に 宣言・定義 をする必要はありません

##主な組み込みオブジェクト

オブジェクト 概要 バージョン
(Global) jsの基本機能にアクセスする手段を提供
Object 全てのオブジェクトの雛形となる機能を提供
Array 配列を操作するための手段を提供
String 文字列を操作するための手段を提供
Boolean 真偽知を操作するための手段を提供
Number 数値を操作するための手段を提供
Function 関数を操作するための手段を提供
Math 数値演算を行うための手段を提供
Date 日付を操作するための手段を提供
RegExp 正規表現に関わる機能を提供
Error / XxxxxError エラー情報を管理
Map/WeakMap キー/連想配列を操作するための手段を提供 ES2015
Set/WeakSet 値の集合を管理する手段を提供 ES2015
Symbol シンボルを操作するための手段を提供 ES2015
Proxy オブジェクトの挙動をカスタマイズする手段を提供 ES2015
Promise 非同期処理をするための手段を提供 ES2015

Number・String・Boolean・Symbol は、Javascrptの主なデータ型に対応しています。

###サンプルコード
以下では、Stringオブジェクトlengthプロパティと、オブジェクトを使用していないものの出力結果を比較しています。

// 文字をコンソールに出力
let greeting = 'Hello World';
console.log(greeting);
//出力結果→ Hello World

// Stringオブジェクトのlengthプロパティを使用
let text = 'Hello World';
console.log(text.length);
//出力結果→ 11

#オブジェクトのインスタンス化の注意
先のコマンドを実行して疑問に思うことはありませんか?
そうです。Stringオブジェクトを使用しているのにインスタンス化をしていません。

しかし、javascriptでは リテラル(プログラムに直接記述するデータ値{データ型}) に対応する組み込みオブジェクトはインスタンス化をする必要がありません。

##データ型ではインスタンス化は不要
リテラルに対応する組み込みオブジェクトはインスタンス化が不要と先に述べました。

しかし、データ型でもインスタンス化をしてオブジェクトを生成することは可能です。
ですが、↓のソースコードの様に

・記述が長くなる
・出力がおかしくなる

という問題が発生します。

####new演算子によるオブジェクトの出力

let item = new Boolean(false); 

if(item) {
    console.log('itemはtrueです');
}
//出力結果→ itemはtrueです

※ falseを Boolean で設定しているのに、consoleが実行されてしまってます。

####インスタンス化していないオブジェクトの出力

let item = false;

if(item) {
    console.log('itemはtrueです');
}
//出力結果→ not available

インスタンス化していない、出力が正しい挙動をしています。

その理由は、リテラル(データ型)にインスタンス化を行うと

null以外のオブジェクトはtrue とみなしてしまうからです。
もう一度!
null以外のオブジェクトはtrue とみなしてしまうからです。

なので、この記述は避けるべきです。
以上から、基本データ型をインスタンス化するのは避けてください。

#あとがき
以上が、組み込みオブジェクトとnew演算子によるインスタンス化 でした。
いかがでしたか?
役に立っていれば嬉しいです。
では!

#Myリンク
また、Twitter・Portfolio のリンクがありますので、気になった方は
ぜひ繋がってください。プログラミング学習を共有できるフレンドが出来るととても嬉しいです。

Twitter
Portfolio
Github
Note

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?