Pull to refresh

Comments 22

А в Сафари что-то среднее

IE версии с 9 или 10 пишет более осмысленную ошибку: image
Жаль что не пишет какой объект, а только метод.
Интересно, это было так сложно сделать, что до этого дошли только сейчас? Профит же очевиден.
На всякий случай уточню, что (судя по дате в Твиттере) до изменения в коде Хрома додумались без мáлого два месяца назад, но в тестовых версиях, которые только теперь начинают обретать стабильность и доходить до конечных пользователей.

(Хотя понятно, что «почему не два года назад?» и всё такое.)
UFO just landed and posted this here
Наводящий вопрос: когда упомянутая Вами версия Chrome 42.0.2311.90 вышла в свет?
Для смягчения адаптации к новому.
Круто, конечно, но разве отладчик не показывает номер строки, где произошла ошибка? Не вижу проблемы в том, чтобы перейти на нужную строку и исправить очепятку.
И ещё, имхо, затруднения ошибка может вызвать лишь в первый раз, когда с ней сталкиваешься. А может и не вызвать.
UFO just landed and posted this here
Проблемы возникают когда есть желание отловить все ошибки. Вот например есть сборщик JS ошибок в консолях клиентов сайта, доступа к самим консолям нет, в результате в базу данных пишется только строчка ошибки и минимальная доступная информация.

И вот на девелоперской машине все отлично, без ошибок, а от пользователей вал «undefined is not a function».

Именно в этом случае данное улучшение будет полезно.
Интересно, как себя поведёт в таком случае динамический вызов функции. Знание строки здесь мало поможет, если я не ошибаюсь.
var f1 = function(){console.log('f1');}
var a = ['f1','f2'];
window[a[0]](); // f1
window[a[1]](); //Uncaught TypeError: undefined is not a function
Отладчик ругается на эту строку:
window[a[1]]();

Согласен, что если массив 'a' объявлен намного выше по коду, тогда отладка усложняется.
UFO just landed and posted this here
Аналогично в 42.0.2311.82 на Linux
Не всё так радужно.

В старом дебаггере:

o = {};
o.n = 3;
o.f() // undefined is not a function
a.n() // number is not a function


В новом дебаггере:

o = {};
o.n = 3;
o.f() // o.f is not a function
a.n() // o.n is not a function


Да, теперь стало чуть лучше от того, что известно, к какому методу пытались обратиться, но вот дальше всё равно нужно внимательно дебажить.
> a.n() // o.n is not a function

А у меня говорит «Uncaught ReferenceError: a is not defined». Видимо у вас опечатка, и там должно быть o.n();
Посмотрел ради интереса как оно будет в Сафари — «TypeError: 3 is not a function (evaluating 'o.n()')».
Да, действительно опечатался.
Sign up to leave a comment.

Articles