我有一个数组,需要传递到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(当月差异金额)
答案 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或未定义。