56248
いつもお世話になっています。  
下記の質問についてご存知の方がいらっしゃいましたら、ご教示を願います。

* * *

## 【質問の主旨】

[GitHub](https://github.com/echizenyayota/ch6/blob/developer/scripts/es5_class3.js)にUPしたコードではAnimalクラス内で条件文を使用しています。そのうち

```

    if (!(this instanceof Animal)) {
        return new Animal(name);
    }
    
```

上記のコードを使ってコンソール画面を表示させると、以下の結果が表示されます。

```

    トクジロウ
    Animal: トクジロウ
    
```

```

    if (!(this === instanceof Animal)) {
        return new Animal(name);
    }
    
```

一方、上記のコードを用いると下記のエラーが表示されます。

```

    Uncaught SyntaxError: Unexpected token instanceof
    
```

両者の間において結果に差が出るのはなぜでしょうか？

## 【質問の補足】

### 1.

公式ドキュメントで[instanceof](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/instanceof)の用例を確認すると、

```

    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    
    var auto = new Car('Honda', 'Accord', 1998);
    console.log(auto instanceof Car);
    
```

という感じでinstanceof演算子の前に、オブジェクトを記述するという用例があります。ただし今回の質問で使っている`this`については特別に何かを定義している感じがしません。

### 2.

個人的な予測ですが今回の質問で使われている`this`は、グローバルオブジェクトを表す特殊なキーワードではないかと推測しています。もしthisがグローバルオブジェクトであるならば、`this
=== instanceof Animal`としても条件式として文法的に正しい表現をしていると思います。

* * *

以上、ご確認よろしくお願い申し上げます。
CC BY-SA 4.0
2019-06-30T07:33:37.930
56247
2019-06-30T07:55:16.137
32232
question
javascript
"this instanceof Animal" と "this === instanceof Animal" の差を教えてください
`instanceof`は二項演算子なので、文法上の扱いは`*`などと同じです。よって`hoge === *
3`がSyntaxErrorになるのと同じ理由で、`this === instanceof Animal`もSyntaxErrorとなります。

参考:
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/instanceof>
CC BY-SA 4.0
2019-06-30T07:55:16.137
56248
2019-06-30T07:55:16.137
29212
56247
answer