Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:
SqlConnection connection = null;
connection.Open();
Это вызовет ошибку, потому что, пока я объявил переменную «connection
», она не указала ни на что. Когда я пытаюсь вызвать член «Open
», для его устранения нет ссылки, и он будет вызывать ошибку.
Чтобы избежать этой ошибки:
object == null
. Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.
Следующая функция из Remy Sharp выполнит трюк:
function throttle(f, delay){
var timer = null;
return function(){
var context = this, args = arguments;
clearTimeout(timer);
timer = window.setTimeout(function(){
f.apply(context, args);
},
delay || 500);
};
}
В предыдущем коде f
- функция, которую вы хотели бы активировать, и delay
- количество миллисекунд, ожидающих после последнего вызова (по умолчанию - 500, если не указано). throttle
возвращает функцию-оболочку, которая удаляет все существующие таймауты из предыдущих вызовов, а затем устанавливает тайм-аут для delay
миллисекунд в будущем для вызова f
. Ссылка на arguments
возвращаемой функции используется для вызова f
с, гарантируя, что f
получает ожидаемые аргументы.
Вы должны использовать его следующим образом:
$('#search').keyup(throttle(function(){
// do the search if criteria is met
}));
Почти то же самое, за исключением того, что таймер устанавливается только при выполнении условий:
<input id="search" type="text" />
<script>
var timer, value;
$('#search').bind('keyup', function() {
clearTimeout(timer);
var str = $(this).val();
if (str.length > 2 && value != str) {
timer = setTimeout(function() {
value = str;
console.log('Perform search for: ', value);
}, 2000);
}
});
</script>