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なのか?
・配列リテラル、オブジェクトリテラルはプリミティブ型と違ってインスタンスを生成するため。
リテラルについて
プログラム上で数値や文字列など、データ型の値を直接記述できるように構文として定義されたもの
まとめ
プリミティブ型とオブジェクト型のリテラルではインスタンスを生成するかどうかが異なることが分かった。