Pull to refresh

Comments 17

За рекомендацию всегда ставить там * — да, надо. А за наличие публичного или защищенного другими механизмами API руки отрывать не обязательно…
Дополню, что можно ставить

<script crossorigin='anonymous'

чтобы видеть тексты ошибок.

Нужно возвращать содержимое Origin, а не *, чтобы авторизация работала.

Вот это уже конструктивное предложение, интересно.


А то если всем руки поотрывать, кто работать-то будет?

Сейчас мы проанализируем каждую из них, расскажем о том, что их вызывает, и о том, как с ними бороться.

и как же бороться с ошибкой 9?
Вовремя инициализировать свои объекты и проверять перед использованием чужие.
я в таких случаях делаю что-то типа
var test = undefined;
if (!test) {
    test = {
        value: 0
    }
}
test.value = 0;

думал может есть способы по чище
Ну тут от контекста зависит: если вместо отсутствующего объекта предполагается использовать некий дефолтный объект, то да; а если жизненно важный объект отсутствует там, где ожидается его наличие — то надо как-то сообщать об ошибке, дебажить.
Можно для начала попробовать просто включить strictNullChecks опцию компиляции в TypeScript.
А почему нельзя просто использовать проерку содержимого?
if (value === typeof 'string') { // 'function', 'number', Array.isArray(value)
  // code
}

или просто
if (!value) return;
вобще не приятно, когда падает на Cannot set property '...' of undefined
круто было бы, еслиб котнструкция типа if (!value) return; была в прототипах объектов
Если объект такой, что undefined — и хрен с ним, то конечно. А вот собрался человек на свадьбу ехать,
var taxi = getTaxi();
taxi.addPassenger(self);

— а такси не приехало. Undefined. Вот это вот if (!value) return, его же люди не поймут. Прежде всего — [его] невеста.

Пример с React и state в первом пункте не совсем правильный. Ошибкой будет


Cannot read property 'items' of null

так как явно не указан state, а по умолчанию он равен null

В более современных браузерах можно использовать метод bind() для передачи необходимой ссылки:

В более современных браузерах — это во всех начиная с 13 года. То есть, традиционный подход как раз с bind/call/apply. А подход с кешированием this от незнания того что bind существует.


сарказм on
Это примерно как говорить, что традиционный способ вёрстки — табличный. А последние браузеры ещё и блочный поддерживают.

var test = {};

if (typeof test !== "undefined") {
	test.value = 1;
	console.log(test.value);
} else {
	console.log("wtf is 'test'");
} 


test = undefined;

if (typeof test !== "undefined") {
	test.value = 1;
	console.log(test.value);
} else {
	console.log("wtf is 'test'");
} 
Sign up to leave a comment.