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