Как это оценивается как ложное? - PullRequest
2 голосов
/ 19 сентября 2011

screenshot of google chrome developer tools showing that both objects have value

При выполнении этого кода показанные значения приводят к cssLoaded = 0;Из того, что я вижу, длина больше 0, и cssStylesheet.sheet имеет свойства, поэтому должно иметь значение true, поэтому cssLoaded должно быть установлено в 1, однако этого не происходит.Должно быть, я что-то здесь упускаю ..?

function _cssIsLoaded(cssStylesheet, stylePath) {
var cssLoaded = 0;
if (tryCount == 3){
    console.log('oops');
}
if (cssStylesheet.href == stylePath){
    try {
        if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0 ){
            cssLoaded = 1;}
        else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText.length > 0 ){
            cssLoaded = 1;}
        else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 ){
            cssLoaded = 1;}
        }
        catch(ex){ }
}
    if(cssLoaded) {
        //alert('cssloadedcomplete');
        resetPops();
        $('#video-overlay').show();
        positionElements();
        saveBizzmail();
        console.log('try:' + tryCount)
    } else {
        tryCount+=1;
        console.log('try:' + tryCount);
        setTimeout(function() { this._cssIsLoaded(cssStylesheet); }, 2000);
    }
}

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

Существует три возможных способа получения вашего кода cssLoaded == 0;

  1. if (cssStylesheet.href == stylePath) оценивается как false.
  2. Все три оператора if/else оцениваются как false.
  3. Один из операторов if/else вызывает исключение, и поэтому другие операторы if/else не выполняются.

При устранении неполадок, связанных с вашей проблемой, вы должны убедиться, чтопервые два не являются проблемой, так как это, вероятно, просто логические ошибки в сравнениях, или данные, поступающие в функцию, не соответствуют ожидаемым.

Для третьего вопроса вы можете реализовать защитное кодирование дляубедитесь, что все три оператора if/else проверены путем изменения вашего кода на это (вам даже не нужно больше пытаться / ловить, потому что это позволяет вашему коду обходить некоторые тесты):

function _cssIsLoaded(cssStylesheet, stylePath) {
    var cssLoaded = 0;
    if (tryCount == 3){
        console.log('oops');
    }
    if (cssStylesheet && cssStylesheet.href == stylePath) {
        if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules && cssStylesheet.sheet.cssRules.length > 0 ) {
            cssLoaded = 1;
        }
        else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText && cssStylesheet.styleSheet.cssText.length > 0 ) {
            cssLoaded = 1;
        }
        else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 ) {
            cssLoaded = 1;
        }
    }
    if(cssLoaded) {
        //alert('cssloadedcomplete');
        resetPops();
        $('#video-overlay').show();
        positionElements();
        saveBizzmail();
        console.log('try:' + tryCount)
    } else {
        tryCount+=1;
        console.log('try:' + tryCount);
        setTimeout(function() { this._cssIsLoaded(cssStylesheet); }, 2000);
    }
}
1 голос
/ 19 сентября 2011

Первая проверка гарантирует, что вы избежите ситуации, подобной NPE (проверив, что cssStylesheet.sheet не равно нулю).

1 голос
/ 19 сентября 2011

Необходимо проверить наличие элемента, в противном случае может произойти ошибка (cssStylesheet.sheet равно undefined). Выражение оценивается как ложное, когда:

  • Переменная не существует (undefined, null, void 0)
  • равно 0 (ноль)
  • равно false
  • равно пустой строке ("", '')
  • A Незначное значение (0/0, NaN)

Обратите внимание, что пустой объект {} оценивается как true, потому что это объект.

Другой пример:

if(window.addEventListener) window.addEventListener("load", function(){}, true);
else if(window.attachEvent) window.attachEvent("onload", function(){});
else window.onload = function();

Если условия if отсутствуют, код выдаст ошибку в более старых версиях IE, у которых нет такого метода, называемого window.addEventListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...