2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

instanceof とは

instanceof 演算子は、あるコンストラクターの prototype プロパティが、あるオブジェクトのプロトタイプチェーンの中のどこかに現れるかどうかを検査します。返値は論理値です。

インスタンスとリテラルで違いを見てみると、、、

const obj = {
    name: 'John',
    age: 30,
    city: 'New York'
}
console.log(obj instanceof Object) // true

const arr = [1, 2, 3, 4, 5]
console.log(arr instanceof Array) // true

const str = 'Hello'
console.log(str instanceof String) // false

const num = 10
console.log(num instanceof Number) // false

const strInstance = new String('Hello')
console.log(strInstance instanceof String) // true
console.log(strInstance instanceof Object) // true
console.log(typeof strInstance) // true

配列やオブジェクトはtrueを返すが、文字列と数値はfalseを返す

なぜstrとnumはfalseなのか?

・インスタンスではなく単なるリテラルであるから。
・リテラルで記述した値はオブジェクトだと思ってしまうが、オブジェクトでなくメソッドを持たないプリミティブな値である。
↑ オブジェクトのように振る舞えるのはラッパーオブジェクトが自動的に変換してくれているから。

リテラルのobjとarrはなぜtrueなのか?

・配列リテラル、オブジェクトリテラルはプリミティブ型と違ってインスタンスを生成するため。

リテラルについて

プログラム上で数値や文字列など、データ型の値を直接記述できるように構文として定義されたもの

まとめ

プリミティブ型とオブジェクト型のリテラルではインスタンスを生成するかどうかが異なることが分かった。

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?