2013-11-06 4 views
1

Отслеживая ошибку, я столкнулся с каким-то странным поведением: Почему это происходит?Когда переменная может быть как нулевой, так и функцией?

Примечание: Для справки этот код является результатом того, что код JavaScript работает с сжатым компилятором закрытия.

В chrome отладчик приостановлен на пороге ошибки. И я выпустил несколько строк в консоли (см. Ниже).

a 
> null 
B.Ta.Cd[a] 
> "Override this" error is thrown 
B.Ta.Cd[null] 
> undefined 

Я не понимаю, что если a должен быть null то почему вторые две линии не производят то же самое.

Интересно, что я хотел посмотреть, как a и null отличаются.

typeof(a) 
> "function" 
typeof(null) 
> "object" 

Теперь мне интересно, как может a быть как функция и null?

This video shows the tests in the console

Мой фикс было проверить typeof(a) == "function" затем вернуться. Но мне не нравится добавлять исправления для проблем, которые я не понимаю.

+0

Можете ли вы попробовать 'B.Ta.Cd [0]'? Я бы предположил, что нуль принуждается к 0. –

+0

что делает ваша функция? Вы используете '==' где-то? Попытайтесь перейти на '===' и посмотреть, все ли у вас такое же поведение. –

+0

@ScottMermelstein: Нет; Это не. – SLaks

ответ

1

Основываясь на строках мышления СкоттаМермельштейна (спасибо за помощь), оказывается, что функция valueOf на функции a была переопределена, чтобы вернуть значение null. Поэтому попытка увидеть то, что a находится в консоли, оказывается довольно вводящей в заблуждение.

См. Пример this fiddle.

Смежные вопросы