В JavaScript оператор instanceof
проверяет, является ли объект экземпляром определенного класса или функции-конструктора. Он оценивается как true
, если объект является экземпляром указанного класса или его подкласса; в противном случае он оценивается как false
.
Теперь давайте рассмотрим случай, который вы упомянули:
console.log("why it is false" instanceof String); // Output: false
В этом примере выражение "why is it false" instanceof String
проверяет, является ли строковый литерал "why is it false"
экземпляром класса String
. Однако он возвращает false
.
Причина этого заключается в том, что строковые литералы в JavaScript являются примитивными значениями, а не экземплярами класса String
. Механизм JavaScript автоматически приводит строковые литералы к строковым объектам, когда это необходимо, например, когда вы выполняете операции или получаете доступ к свойствам или методам, которым требуются объекты.
Давайте проверим несколько примеров, а не будем говорить больше:
Пример 1: строковый литерал
const str = "why is it false"; console.log(typeof str); // Output: string console.log(str instanceof String); // Output: false
В этом примере мы присваиваем строковый литерал "why is it false"
переменной str
. Оператор typeof
возвращает 'string'
, так как str
является значением примитивной строки. Оператор instanceof
возвращает false
, поскольку str
не является экземпляром класса String
.
Пример 2: строковый объект
const strObj = new String("why is it false"); console.log(typeof strObj); // Output: object console.log(strObj instanceof String); // Output: true
В этом примере мы создаем объект String
, используя ключевое слово new
и конструктор String
. Оператор typeof
возвращает 'object'
, поскольку strObj
является экземпляром класса String
. Оператор instanceof
возвращает true
, потому что strObj
действительно является экземпляром класса String
.
Все равно для вас это будет недоразумение 🤔 ок, продолжим
Пример 3. Приведение к строковому объекту
const str = "why is it false"; const strObj = Object(str); console.log(typeof strObj); // Output: object console.log(strObj instanceof String); // Output: true
В этом примере мы используем функцию Object
для явного преобразования строкового литерала "why is if false"
в объект String
. Оператор typeof
возвращает 'object'
, потому что strObj
теперь является экземпляром класса String
. Оператор instanceof
возвращает true
, поскольку strObj
является экземпляром класса String
.
Хорошо, в заключение, при использовании оператора instanceof
важно помнить, что строковые литералы ("why is it false"
) являются примитивными значениями, а не экземплярами класса String
. Для работы со строковыми объектами вы можете явно создавать экземпляры с помощью конструктора String
или использовать методы принуждения, такие как Object(str)
, для преобразования строкового литерала в объект String
.
Не забудьте поделиться с другими!
Like-payk patpiska-matpiska qilinilovradi😉
Telegram: Диёрбек_дев