Комментарии 8
И всё таки это надо добавить на wtfjs.com
Эту особенность упоминает Кайл Симпсон в книге "Вы не знаете JS: Типы и грамматические конструкции".
Тот факт, что Function.prototype является пустой функцией, RegExp.prototype — «пустым» регулярным выражением (например, без совпадения), а Array.prototype — пустым массивом, делает их удобными «значениями по умолчанию», которые могут быть присвоены переменным, если этим переменным еще не присвоено значение подходящего типа.
Интересное применение))), надеются, что никогда не увижу такое в коммерческом коде. Существуют люди, которые инициализируют свои переменные прототипами?)). Но спасибо за наводку, как раз хотел эту книгу почитать.
Там вначале пол isPrototype — ну пойди возьми в джаве такое, сколько может на js пиариться, чушь, дёшево
Выходит, что Array.prototype это действительно массив и никакой ошибки и нелогичности здесь нет.
Это и есть ошибка и нелогичность.
Хорошая статья, спасибо )
Как будто бы значение результатов вызова Object.prototype.toString.call в некоторой части подозрительно совпадает с кодом ниже:
, подозреваю, что в этом есть какой-то такой явный намёк…
Как будто бы значение результатов вызова Object.prototype.toString.call в некоторой части подозрительно совпадает с кодом ниже:
[].constructor.name // Array для [object Array]
{}.constructor.name // Object для [object Object]
(()=>{}).constructor.name // Function для [object Function]
, подозреваю, что в этом есть какой-то такой явный намёк…
Интересная статья, спасибо!
Теперь понял почему в lodash, для проверки ли является переданный объект датой, используют toString
объекта, возможно, чтобы избежать ошибок при проверке между iframe. Тогда согласно спецификации, будет взят тег, соответствующий внутреннему слоту.
toString.call(new Date()) // "[object Date]"
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почему Array.isArray(Array.prototype) возвращает true?