Size: a a a

2020 May 03

AN

Anton Nemtsev in Frontend UA
ага
источник

EO

Eugene Obrezkov in Frontend UA
Anton Nemtsev
If Type(x) is Number or BigInt, then
   Return ! Type(x)::equal(x, y).

Вот что такое этот equal()?
источник

AN

Anton Nemtsev in Frontend UA
оценка любых выражений происходит слева на право, правильно?
источник

EO

Eugene Obrezkov in Frontend UA
да, всё по канонам precedence (но это не точно, может какие-то угловые кейсы есть)
источник

AN

Anton Nemtsev in Frontend UA
м … не очень полнял сноску. я пытаюсь понять как у них работает это самое equal.
ссылки на него приводят к https://tc39.es/ecma262/#sec-equality-operators
И я например не очень то понимаю как именно оно производит сравнение типа number и bigInt
выполняет приведение обоих типов bigInt вероятно, но это предположение
источник

AN

Anton Nemtsev in Frontend UA
как к биг инт привезти ясно https://tc39.es/ecma262/#sec-tobigint
вопрос именно в том что означает equal и какой порядок действий для типов
источник

AN

Anton Nemtsev in Frontend UA
Number  Throw a TypeError exception.
источник

AN

Anton Nemtsev in Frontend UA
бгг
источник

EO

Eugene Obrezkov in Frontend UA
Anton Nemtsev
м … не очень полнял сноску. я пытаюсь понять как у них работает это самое equal.
ссылки на него приводят к https://tc39.es/ecma262/#sec-equality-operators
И я например не очень то понимаю как именно оно производит сравнение типа number и bigInt
выполняет приведение обоих типов bigInt вероятно, но это предположение
не совсем понял вопрос

там есть runtime semantics, в котором описывается что происходит с выражениями
источник

EO

Eugene Obrezkov in Frontend UA
Anton Nemtsev
If Type(x) is Number or BigInt, then
   Return ! Type(x)::equal(x, y).

Вот что такое этот equal()?
а, я кажется понял
источник

EO

Eugene Obrezkov in Frontend UA
вот эта вот штука ! Type(x) это абстрактная операция, которая возвращает тип выражения x
эти типы описаны в таблице типов в спецификации
источник

Вт

Ві тя in Frontend UA
👏👏👏 хорошо пишешь на англ
источник

EO

Eugene Obrezkov in Frontend UA
Eugene Obrezkov
вот эта вот штука ! Type(x) это абстрактная операция, которая возвращает тип выражения x
эти типы описаны в таблице типов в спецификации
там же есть интересующий тебя T::equal()
источник

EO

Eugene Obrezkov in Frontend UA
Anton Nemtsev
м … не очень полнял сноску. я пытаюсь понять как у них работает это самое equal.
ссылки на него приводят к https://tc39.es/ecma262/#sec-equality-operators
И я например не очень то понимаю как именно оно производит сравнение типа number и bigInt
выполняет приведение обоих типов bigInt вероятно, но это предположение
источник

AS

Alexey Shvayka in Frontend UA
Anton Nemtsev
В 7.2. Testing and comparasion operations есть описание многих мета-функций, например isCallable, isInteger, IsExtensible.

Я правильно понимаю, что все эти функции не доступны в языке?
А почему?
isCallable: typeof x == 'function' (но есть нюанс)
isInteger: Number.isInteger
isExtensible: Object.isExtensible (только для объектов)
источник

AS

Alexey Shvayka in Frontend UA
Anton Nemtsev
При сравнении типов в спеке можно увидеть
If Type(x) is different from Type(y), return false.

мета Type(x) эквивалентна typeof x?
или есть нюанс?
отличается от typeof для null и document.all
источник

AS

Alexey Shvayka in Frontend UA
Anton Nemtsev
м … не очень полнял сноску. я пытаюсь понять как у них работает это самое equal.
ссылки на него приводят к https://tc39.es/ecma262/#sec-equality-operators
И я например не очень то понимаю как именно оно производит сравнение типа number и bigInt
выполняет приведение обоих типов bigInt вероятно, но это предположение
Number::equal и BigInt::equal по-разному работают для больших чисел, поэтому и такая нотация
источник

AN

Anton Nemtsev in Frontend UA
Cпасибо
источник

VS

V7v S6k in Frontend UA
Anton Nemtsev
В 7.2. Testing and comparasion operations есть описание многих мета-функций, например isCallable, isInteger, IsExtensible.

Я правильно понимаю, что все эти функции не доступны в языке?
А почему?
Це просто формальні описи для певних концептів та операцій які використовуються компіляторами. Сам жс їх не використовує як правило і до них не можна отримати доступу, оскільки це внутрішня імплементація, якої вендори можуть не дотримуватися навіть.
источник

AS

Alexey Shvayka in Frontend UA
уточнение: рантаймы могут инлайнить абстрактные операции, но все observable steps и их порядок должен быть идентичен спеке
источник