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