Один мой друг обнаружил какое-то интересное поведение в каком-то коде Javascript, который я решил продолжить.
Сравнение
(function (x) {return x*x;}) > [1,2,3]
возвращает true
в большинстве основных браузеров (Firefox, Chrome, Opera и Safari) и false
в IE9. Для меня нет логического результата этого сравнения, кроме undefined
, поскольку нет способа сказать, что функция больше, чем массив.
Считая это в стандарте ECMA- script, он говорит, что фактические аргументы >
, когда он используется для объектов, являются результатом вызова внутренней операции ToNumber для аргументов. Некоторые эксперименты и дальнейшее чтение говорят мне, что это не то же самое, что применять преобразование типа, например (Number) arg
. Читая спецификацию, мне трудно понять, что происходит здесь.
Может ли кто-нибудь заполнить меня тем, что на самом деле происходит здесь?