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

19

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

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

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

Output: "string"

console.log(foo instanceof String);

Output: false

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

  • 3
    В JavaScript, я считаю , что есть дихотомия между примитивным типом строки и «объект» String типа. Большую часть времени они взаимозаменяемы, по-видимому, не с целью проверки instanceof .
  • 3
    Взгляните на это: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
Показать ещё 4 комментария
Теги:
syntax
instanceof
typeof

2 ответа

35
Лучший ответ

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

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

6

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

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

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

Вывод:

object
true
  • 1
    Вы должны заметить, что вывод typeof фактически будет "object" (строчная строка)
  • 0
    @rgthree: rgthree: Да, вы правы. Я исправил вывод.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню