Подтвердить что ты не робот

Различия между typeof и instanceof в JavaScript

Я работаю с node.js, поэтому это может быть специфично для V8.

Я всегда замечал некоторые странности с различиями между typeof и instanceof, но вот тот, который действительно меня беспокоит:

var foo = 'foo';
console.log(typeof foo);

Output: "string"

console.log(foo instanceof String);

Output: false

Что там происходит?

4b9b3361

Ответ 1

typeof - это конструкция, которая "возвращает" примитивный тип того, что вы его передаете.
instanceof проверяет, отображается ли правый операнд в цепочке прототипов слева.

Важно отметить, что существует огромное различие между строковым литералом "abc" и строковым объектом new String("abc"). В последнем случае typeof вернет "объект" вместо "string".

Ответ 2

Будут буквальные строки и существует класс String. Они являются отдельными, но они работают без проблем, т.е. Вы все равно можете применять методы String к литеральной строке и будут действовать так, как если бы буквальная строка была экземпляром объекта String.

Если вы явно создаете экземпляр String, это объект, и это экземпляр класса String:

var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);

Вывод:

object
true