Cannot convert undefined or null to object в Javascript

Я сравниваю договоренность, которая прибывает ко мне из консультации следующего способа:

var data = response['return']; // Aquí se almacena el arreglo
var tableHead = '<tr>';
//Aquí comparo el arreglo para validar si esta vacío o indefinido o null

if(data === null || data === 'undefined' || data === ''){

  //Quiero imprimir este mensaje en el tbody de la tabla que estoy armando
  $tblReport.find('tbody').html('No hay datos disponibles');
}else{

//Aquí hago todo lo que necesito para formar mi tabla
 Object.keys(data[0]).each(function(prop){
  if(prop !== 'id_land' && prop !== 'id_product'){
    tableHead += '<th>'+prop+'</th>';
  }

 });
}

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

Я не понимаю, состоит ли он в том, что я врежу сравнения, так как я попробовал следующее и оно я не функционирует:

if(typeof(data) === null || typeof(data) === 'undefined' || typeof(data) === ''){

      //Quiero imprimir este mensaje en el tbody de la tabla que estoy armando
      $tblReport.find('tbody').html('No hay datos disponibles');
    }else{

    //Aquí hago todo lo que necesito para formar mi tabla
     Object.keys(data[0]).each(function(prop){
      if(prop !== 'id_land' && prop !== 'id_product'){
        tableHead += '<th>'+prop+'</th>';
      }

     });
    }

или также:

if(data === null || data === 'undefined' || data === ''){

          //Quiero imprimir este mensaje en el tbody de la tabla que estoy armando
          $tblReport.find('tbody').html('No hay datos disponibles');

return null;
        }else{

        //Aquí hago todo lo que necesito para formar mi tabla
         Object.keys(data[0]).each(function(prop){
          if(prop !== 'id_land' && prop !== 'id_product'){
            tableHead += '<th>'+prop+'</th>';
          }

         });
        }
0
задан 19.07.2016, 23:30
3 ответа

Есть несколько вещей, которые нужно иметь в виду.

undefined не идет между кавычками, это размещенное слово.

> var data
> data === "undefined"
< false
> data === undefined
< true

Однако typeof, если он возвращает цепь "undefined"... Смущенные

> typeof data
< "undefined"
> typeof data === "undefined"
< true
> typeof data === undefined
< false

не? итак, если это, немного, один из немного скрученных features javascript, кроме того обрати внимание в этой таблица правды , как ведут себя операторы === и ==. Оператор == может давать часто фальшивые позитивы в зависимости от данных.

С другой стороны, typeof null возвращается "object". Это что-то, полученное в наследство с первых версий javascript и нет много, который делать ему. Из-за этого он не является очень полезным.

самое простое состояло бы в том, чтобы использовать

if (data) { 
   // no es null, ni undefined. 

} else {
   // es null o undefined, poner mensaje de "no hay datos"

}
1
ответ дан 24.11.2019, 13:48
  • 1
    Большое спасибо твоим ответом он путался со сравнениями – Fabian Sierra 19.07.2016, 21:48

Они обобщают == и ===, чтобы санкционировать vacГ - вы

  • !a, подразумевай, что в puede быть: null, undefined, false, 0, "" (цепь vacГ - в)
  • a == false не то же самое, что и !a, потому что [] и "0" == false, но не используя !a
  • a == null подразумевает, что в puede быть: null, undefined
  • a === null подразумевает, что в puede быть: null

, Тестируя

, Чтобы видеть cГіmo, функционирует годится делать какие-то pruebitas, например:

[null, undefined, false, 0, '', [], {}, "0", true, 1].forEach(function(valor){
    console.log('el valor',JSON.stringify(valor));
    if(!valor)          console.log('!');
    if(valor == false)  console.log('==false');
    if(valor === false) console.log('===false');
    if(valor == null)   console.log('==null');
    if(valor === null)  console.log('===null');
    if(valor == 0)      console.log('==0');
    console.log('**********');
});
2
ответ дан 24.11.2019, 13:48

Уже я это решил в if, где он делал ее comparaciГіn вместо "===", поместил "==", asГ-:

if(data == null || data == 'undefined' || data == ''){

 $tblReport.find('tbody').html('No hay datos disponibles');

}

то, что leГ - состоит, в том, что Javascript, сделав это, способствует тому, чтобы стоимость была сравнимой, и с "===" он строже со сравнениями Привет!

0
ответ дан 24.11.2019, 13:48
  • 1
    Я верю в то, что быть должным, и # 237; схвати решать это наоборот. Обычно в javascript использование == не рекомендуется. Вместо того, чтобы использовать data == 'undefined' быть должным и # 237; схвати использовать if (data), которые дают тебе тот же результат для трех сравнений. Прочитай james.padolsey.com/javascript/truthy-falsey – devconcept 19.07.2016, 20:14
  • 2
    Если у тебя есть raz и # 243; n, большое спасибо Привет! – Fabian Sierra 19.07.2016, 21:48