Что именно является логическим флагом «LeftFirst» в «Алгоритме абстрактного реляционного сравнения» в ECMAScript? - PullRequest
1 голос
/ 22 марта 2020

Может кто-нибудь объяснить, что именно является LeftFirst Булевым флагом в Abstract Relational Comparison Algorithm в ECMAScript? Я знаю, что есть только один оператор <, обрабатывающий все другие реляционные операторы, такие как >, >=, <=, как указано в спецификации ECMAScript в Абстрактное реляционное сравнение с использованием логического значения LeftFirst Флаг и пример: когда мы пишем и выполняем операцию, такую ​​как 10 > 5, LeftFirst Boolean Flag становится false, а левый операнд 10 перемещается в правую сторону, где находится операнд 5, и вправо операнд 5 перемещается в левую часть, где раньше был операнд 10, а оператор > становится оператором < и, наконец, что-то подобное выполняется 5 < 10, но теперь мой вопрос: при выполнении 5 < 10 Я должен знать, какой операнд вычисляется первым, это операнд 5 или операнд 10? Я спрашиваю об этом, потому что они не упомянули об этом в спецификации ECMAScript в абстрактном алгоритме реляционного сравнения .

, и я должен знать, почему >= выполняется с LeftFirst true и почему <= выполняется с LeftFirst false. Пожалуйста, помогите мне

1 Ответ

1 голос
/ 22 марта 2020

Входные значения x и y в описании алгоритма, как ожидается, будут полностью оценены до начала этих шагов. Флаг таков, что операции типа ToPrimitive() выполняются в правильном порядке.

Например, x и y могут быть ссылками на объекты. Операция ToPrimitive() вызовет либо .toString(), либо .valueOf(), чтобы выполнить операцию сравнения. Любая из этих функций может иметь побочные эффекты, поэтому флаг гарантирует, что операции выполняются в правильном порядке в соответствии с тем, как на самом деле выглядит исходный код.

«Побочный эффект» - это изменение состояния программы это происходит при вызове функции. Функция toString() может изменить все, что может изменить любая другая функция: свойства объекта, глобальные переменные, что угодно. Правило гарантирует, что эти изменения происходят в правильном порядке (изменения левой стороны перед изменениями правой стороны), независимо от того, что алгоритм делает, чтобы «перевернуть» операнды.

...