Я по этой теме всё понял.
Если вы разрабатывали на Java, то вы, наверное, привыкли проверять тип переменной на строку через instanceof. В JavaScript это работает, но не совсем, то есть не совсем так работает, так как в JavaScript есть примитивный тип строка и класс строка.
Примитивный тип строки создаётся, когда какой-либо переменной присваивается строковый литерал:
1 2 |
let var1 = "Vasya"; let var2 = 'Oksana'; |
Класс строки создаётся, когда используется конструктор new String:
1 |
let var1 = new String("I am an object"); |
String можно использовать не только как конструктор, но и как функцию, тогда будет создан строковый примитив, правда особого смысла в этом нет:
1 |
let var1 = String("I am a primitive"); |
Класс строка и примитивный тип строка — это всё разные вещи.
Проверить, что переменная содержит значение примитивного типа строки можно через typeof:
1 2 3 4 5 6 7 8 |
let var1 = "Vasya"; // можно так: let var1 = String("Vasya"); alert(typeof var1 === 'string'); // можно typeof вызвать как функцию alert(typeof(var1) === 'string'); |
Проверить, что переменная ссылается на объект строки можно с помощью instanceof:
1 2 3 |
const var1 = new String("Vasya"); alert(var1 instanceof String); |
Суммируя всё, что описано выше, проверять на строковый тип нужно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const house = 'Дом'; const oksana = "Оксана"; const petya = new String('Петя'); const sum = 100.0; console.log(checkIsString(house)); // true console.log(checkIsString(oksana)); // true console.log(checkIsString(petya)); // true console.log(checkIsString(sum)); // false function checkIsString(var1) { return typeof var1 === 'string' || var1 instanceof String; } |
В реальном коде реальных проектов вряд ли получится встретить использование instanceof String
Советую скачать популярные javascript-библиотеки и проверить.