当变量未定义或为null时,if语句不起作用

时间:2019-05-24 19:40:08

标签: javascript jquery

我有一个数组,需要传递到php页面,该数组很好,但是我必须在其中添加一个新变量,变量为lastBookingDate,然后将此变量与当前日期匹配并获取月份到目前为止,diff很好,问题是当未定义变量时出现错误

  

未捕获的TypeError:无法读取HTMLDocument上未定义的属性“ split”。 (:2:170)“

我有一个if语句,但我不断遇到相同的错误。变量信息来自datalayer(GTM)中的变量,当没有信息时,该变量根本不存在

var bookingDateExist = GTM;

if (bookingDateExist === "undefined") {
  var Booking = "no booking";
} else {
  var lastBookedDate = bookingDateExist;
  var dateString = lastBookedDate;
  var dateParts = dateString.split("/");
  var dateObject = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);

  var start_date = new Date(); //Create start date object by passing appropiate argument
  var end_date = dateObject;
  var total_months = (end_date.getFullYear() - start_date.getFullYear()) * 12 + (end_date.getMonth() - start_date.getMonth());
  var Booking = Math.abs(total_months);
}

我期望可变预订=无预订或可变预订= 12(当月差异金额)

2 个答案:

答案 0 :(得分:4)

问题是因为您要检查bookingDateExist变量是否是值为undefined string

要解决此问题,您可以使用强制类型将值转换为布尔值。由于null将强制转换为false,因此您可以简单地在条件中使用!bookingDateExist,如下所示:

if (!bookingDateExist) {
  var Booking = "no booking";
} else {
  var dateParts = bookingDateExist.split("/");
  var end_date = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);

  var start_date = new Date();
  var total_months = (end_date.getFullYear() - start_date.getFullYear()) * 12 + (end_date.getMonth() - start_date.getMonth());
  var Booking = Math.abs(total_months);
}

唯一要注意的是,您强制的值是否包含等于false的有效值,例如0'false'。但是,在这种情况下,这是个约会,因此永远都不会发生。

还要注意,我在else条件下整理了逻辑;您正在创建许多不必要的变量。

答案 1 :(得分:2)

if (bookingDateExist === "undefined")

这将不起作用,因为您实际上是在将变量与字符串文字“ undefined”(实际上是单词本身)进行比较。

您可以通过执行以下操作来实际检查未定义的值:

if (typeof bookingDateExist === "undefined")

但是,如果您遇到NULL而不是未定义的值,这将无济于事。相反,我建议:

if (bookingDateExist == null)

使用宽松的比较==将强制将未定义的类型视为等于null。这将检查bookingDateExist是否为null或未定义。