Принуждение в JavaScript - PullRequest
       4

Принуждение в JavaScript

0 голосов
/ 07 февраля 2019

Мне было интересно узнать несколько вещей о принуждении.

Когда вы делаете:

1 == true // true

Какой из них принужден в какой?это левый или правый?

Когда вы делаете

undefined == null // true

Как это работает точно?В каком порядке он пытается конвертировать его?Например:

1)    String(undefined) == String(null) // false
2)    Number(undefined) == Number(null) // false
3)    Boolean(undefined) == Boolean(null) // true

Сначала он пытается привести левый операнд?тогда правильно?затем оба?

РЕДАКТИРОВАТЬ: Как объяснено в комментариях: «не дубликат. В то время как оба вопроса касаются принуждения типов, этот вопрос спрашивает, какой операнд будет приведен в другой. Другой вопрос об источнике истиныпри оценке принудительных типов "

1 Ответ

0 голосов
/ 07 февраля 2019

Процесс описан в 7.2.12 Сравнение абстрактного равенства :

Сравнение x == y, где x и y являются значениями, дает true илиложный.Такое сравнение выполняется следующим образом:

Если тип (x) совпадает с типом (y), вернуть результат выполнения строгого сравнения равенства x === y.

Если x равенnull и y не определено, верните true.

Если x не определено и y равно нулю, верните true.

Если тип (x)is Number, а Type (y) - String, возвращает результат сравнения x == ToNumber (y).

Если Type (x) - String, а Type (y) - Number, вернуть результат сравнения ToNumber (x) == y.

Если тип (x) - логический, вернуть результат сравнения ToNumber (x) == y.

Если тип (y) является логическим, вернуть результат сравнения x == ToNumber (y).

Если тип (x)либо String, Number, либо Symbol, а Type (y) равен Object, затем возвращает результат сравнения x == ToPrimitive (y).

Если Type (x) равен Objectи Type (y) является либо String, Number, либо Symbol, затем возвращает результат сравнения ToPrimitive (x) == y.

Вернуть false.

Таким образом, вместо того, чтобы принуждать одну сторону, а затем другую, иличто-то в этом роде, более того, интерпретатор просматривает этот список выше, пока не найдет подходящее условие, и не выполнит результирующую команду, которая может включать принудительное использование только левой стороны или только правой стороны (и, в редких случаях, обоих в случаедостигается рекурсивная команда, например, с true == '1', которая выполнит условие 8, превратится в 1 == '1', выполнит условие 6 и превратится в 1 == 1, выполнит условие 3 и разрешится до true)

...