machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Алгоритм сравнения JavaScript

Дата публикации Oct 3, 2019

Оператор «равно» кажется очень простой концепцией, но на практике он выполняет много манипуляций в фоновом режиме.

Эта статья посвящена пониманиюосновные базовые понятия, которые приводят к манипулированию равенством. Мы рассмотрим следующие сценарии:

  1. Сравнение значений разных типов
  2. Приравнивание вторичного типа объекта к примитивному значению
  3. Сравнение нулевых и неопределенных и ложных значений.
  4. Преобразования типов во время проверок на равенство

Мы рассмотрим несколько аспектов сравнения двух значений с помощью оператора равенства (==). Сравнивая две переменные, мы также должны рассмотреть концепциюпреобразование типов.


Начиная

Задумывались ли вы, что происходит за кулисами, когда вы сравниваете значения различных типов в примере сравнения объектов с числовыми значениями? Давайте посмотрим на эти детали.

Когда мы выполняем операциюx == yвсегда возвращает true или false. Однако, при сравнении, следующие сценарии могут быть возможными ...

Сравнение между одними и теми же типами: (Type (x) == Type (y))

Когда мы сравниваем значения переменных одного типа, это сравнительно легче выиграть. Нам не нужно много анализировать, чтобы сравнивать переменные одного типа.

Ниже мы будем искать простые сравнения с одним и тем же типом, а затем мы расширим документ для сравнения значений разных типов.

  1. Если обаType(x) == Type(y) == “undefined”то выводtrue,

2. КогдаType(x) == Type(y) == “null”, выходtrue,

3. ЕслиType(x) == Type(y) == “String”, сравнение вернетсяtrueеслиxа такжеyявляются точными последовательностями символов и имеют одинаковую длину для значений, содержащихся в строке.

4. ЕслиType(x) == Type(y) == “Boolean”, он вернетсяtrueесли оба значения либоtrueилиfalseи он вернетсяfalseесли оба значения не совпадают.

5. ЕслиType(x) == Type(y) == “Object”, он вернетсяtrueесли обе ссылки на объекты указывают на один и тот же объект. В случае объектов сравнение выполняется для ссылки на память. При сравнении проверяется, указывают ли оба объекта на одно и то же место в памяти. Если место в памяти совпадает, возвращаетсяtrue,

Однако что произойдет, если мы сравним два объекта с одинаковыми свойствами внутри них? Вернется ли оператор сравненияtrue?

В приведенном выше фрагменте кода мы видим, что даже если объект содержит те же значения свойств, объект будет равенfalseтак как адрес памяти двух переменных отличается.


Интересные вещи начинаются здесь

Пока что мы рассмотрели сценарии, которые достаточно интуитивно предсказуемы. Давайте посмотрим дальше на более специализированный сценарий со сравнением.

6. ЕслиType(x) == Type(y) == “Number”

  • ЕслиValue(x) is NaNлюбое значение по сравнению сNaNвозвращаетсяfalse,
  • ЕслиValue(y) is NaNсравнение сNaNвозвращаетсяfalse,
  • ЕслиValue(x) == Value(y) == NaN,

Приведенный выше сценарий представляет собой случай, когдаNaNпо сравнению сNaN,

В приведенном ниже коде“Hello” * 10это не число, а, следовательно, значениеbявляетсяNaN, Мы сравниваем две переменные, содержащиеNaNзначения. Как вы думаете, выход будет?

Давайте посмотрим на результат:

В приведенном выше примере можно интерпретировать, что если две сравниваемые переменные не являются числом, то это не означает, что они одинаковы.NaNозначает, что это не число. Если это не число, это может быть что угодно. Так что приравнивать их вместе не дастtrue,

  • ЕслиValue(x) = -0 and Value(y) = 0, сравнение возвращает истину.
  • ЕслиValue(x) = 0 and Value(y) = -0, сравнение возвращает истину.

Значения сравнения разных типов

Он представляет собой сценарий: (Тип (x)! = Тип (y))

Теперь рассмотрим аспект сравнения двух переменных разных типов. Давайте посмотрим на другой сценарий для сравнения.

  1. Value(x) == null and Value(y) == undefined: В данном сценарии результат сравнения оказываетсяtrue,undefinedа такжеnull значения приравнены кtrue,

Заметка:“undefined == null”а также“null == undefined”возвращаетсяtrue,

2.Type(x)это строка иType(y)это число.

Это интересный сценарий, в котором мы сравниваемстрока с числовым значением. Нам необходимо понять основную концепцию, лежащую в основе сравнения этих двух различных типов переменных.

Как вы думаете, будет ли какой-то тип конверсии в приведенном выше сценарии? Если вы думаете, что происходит такой тип конверсии, можете ли вы предсказать, какой тип конверсии произойдет? Будет ли строка преобразована в число или наоборот?

Вывод вышеуказанного выполнения может быть обобщен как:

* ToNumber(Value(x)) == Value(y)

Всякий раз, когда мы сравниваем числовое значение со строковым значением, строковое значение сначала преобразуется в числовое значение, а затем они сравниваются. Тип строки преобразуется в числовой тип перед сравнением.

3.Type(x)является логическим иType(y)это число.

Это еще один сценарий, в котором требуется преобразование типа, если у нас одно из свойств имеет логическое значение, а другое свойство представляет числовое значение. Затем логический тип преобразуется в числовое значение, и выполняется сравнение Мы можем обобщить это следующим образом:

* ToNumer(Value(x)) == Value(y)

Просто чтобы добавить к информации, касающейся преобразования типов для логического значения, во время преобразования типа,trueтип преобразуется в числовое значение как1, а такжеfalseпреобразуется в числовое значение0,

Смотрите пример ниже для большей ясности:

В приведенных выше примерах мы можем видеть, что когда одно из значений представляет логический тип, а другое - строкового типа, логическое значение преобразуется для представления значения 1 или 0.

4.Type(x)это объект иType(y)это строка

Это последний сценарий сравнения, гдеType(x)это объект иType(y)может быть числовым, строковым или логическим значением (примитив). Давайте рассмотрим этот сценарий и поймем, как можно провести сравнение между объектами и примитивными типами данных.

Вы видите, как в приведенном выше сценарии мы пытаемся сравнить объект со строковым значением? Результат сравнения оказываетсяfalse, что, кажется, правильно.

Но возникает вопрос: какова стоимость объекта слева во время операции сравнения? Если вышеуказанная операция вернетсяfalse, может быть некоторый вывод из левой операции, который сравнивается со значением в правой части. Теперь давайте рассмотрим эту ситуацию подробнее.

В приведенном выше коде мы попытались вызватьtoStringметодuserDataобъект, но вывод не имеет большого смысла. Итак, давайте попробуем переопределитьtoStringфункция объекта. Смотрите ниже следующие шаги:

Мы переопределилиtoStringфункция, чтобы получить некоторый логический вывод из вызова функции. ПереопределенныйtoString()функция возвращает текстовое значение,“Hello Mayank”,

Теперь следующий шаг должен дать нам ясность относительно того, что происходит, когда объект сравнивается с примитивными типами. Просто найдите приведенный ниже код и попытайтесь предсказать ответ на этот вопрос.

Если вы все еще не можете предсказать, как работает оператор сравнения между объектными и примитивными типами данных, позвольте мне объяснить.

В приведенном выше выполнении мы видим, что когда объект сравнивался с примитивным типом данных, функцияtoStringвызывается на объекте, и вывод изtoStringфункция приравнивается к другому типу примитива balue. Если выход изtoStringсовпадает со значением типа примитива, выход получаетсяtrue(иначе,falseвозвращается).


Вывод

Надеюсь, вам понравилась статья!

Другие статьи того же автора:

21 техника оптимизации производительности для React

Простые и эффективные шаги по оптимизации для лучшей производительности приложения React

medium.com

Основы генераторов JavaScript

Быстрый взгляд на одну из лучших функций ES6

medium.com

Введение в React Hooks

Как использовать State Hooks в React

medium.com

Реагировать на компоненты высшего порядка (HOC)

Понять React HOCs с помощью варианта использования

medium.com

Введение в RxJS и реактивное программирование

Реактивное программирование - последнее модное слово в мире JavaScript

medium.com

Глубокая и мелкая копия в JavaScript

Все, что вы хотите знать о глубокой и мелкой копии

medium.com

Использование Memo Hook in React

Как оптимизировать производительность с помощью ловушек useMemo

medium.com

Angular ViewChild и ViewChildren

Все, что вам нужно знать о @ViewChild и @ViewChildren

medium.com

Реагировать useEffect Hooks в действии

Все, что вам нужно знать об использовании ReactEffect Hooks

medium.com

Работа с ECMAScript 2019 Асинхронная итерация с использованием for-of

Как использовать циклы for-of в ECMAScript 2019

medium.com

Работа с компонентами React Pure

Когда стоит работать с чистыми компонентами?

medium.com

Вменяйте недостающие значения с помощью SciKit's Imputer - Python

Отсутствие значений может привести к противоречивым результатам

medium.com

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map