Comments 8

Эту особенность упоминает Кайл Симпсон в книге "Вы не знаете JS: Типы и грамматические конструкции".


Тот факт, что Function.prototype является пустой функцией, RegExp.prototype — «пустым» регулярным выражением (например, без совпадения), а Array.prototype — пустым массивом, делает их удобными «значениями по умолчанию», которые могут быть присвоены переменным, если этим переменным еще не присвоено значение подходящего типа.
Интересное применение))), надеются, что никогда не увижу такое в коммерческом коде. Существуют люди, которые инициализируют свои переменные прототипами?)). Но спасибо за наводку, как раз хотел эту книгу почитать.

Иногда нужны noop-функции как значения по умолчанию, и да, использовал в таких местах ранее Function.prototype вместо () => {}. Сейчас перестал, на всякий случай, мало ли кому код достанется на поддержку.

Там вначале пол isPrototype — ну пойди возьми в джаве такое, сколько может на js пиариться, чушь, дёшево

Выходит, что Array.prototype это действительно массив и никакой ошибки и нелогичности здесь нет.

Это и есть ошибка и нелогичность.

Хорошая статья, спасибо )

Как будто бы значение результатов вызова 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]"
Only those users with full accounts are able to leave comments. Log in, please.