我有一个像这样的用户数据库:
const user = {
subscription: {
plan: 'free_trial',
},
};
我需要在用户更改计划之前检查一些条件。
const currentDate = new Date();
if (user.subscription.trialExpDate > currentDate) {
// do something
} else {
// trialExpDate is either undefined or <= currentDate
user.subscription.trialExpDate = currentDate;
}
我的问题是,对于某些用户trialExpDate
将是undefined
。是否可以将undefined
与currentDate
对象进行比较?或者我是否需要先检查trialExpDate
是否存在?
答案 0 :(得分:3)
我建议查看hasownproperty
。
样品:
if (user.subscription.hasOwnProperty('trialExpDate') && user.subscription.trialExpDate > currentDate) {
// do something
} else {
// trialExpDate is either undefined or <= currentDate
user.subscription.trialExpDate = currentDate;
}
答案 1 :(得分:1)
您可以检查它是否为import sys
sys.path.append("/path/to/your/module/backendapi/api/")
。
null
if (user.subscription.trialExpDate != null || user.subscription.trialExpDate > currentDate) {
// do something
}
else {
// do something else
}
将同时检查变量是空还是未定义。
答案 2 :(得分:0)
简而言之:如果您确定user.subscription.trialExpDate
不能成为null
,则使用原始代码非常好。
请参阅how the JavaScript relational comparison operators coerce types。
如果user.subscription
始终存在而且始终是对象,则Date
对象与undefined
或NaN
之间进行比较,被评估为false
。但是,对于null
,其评估为+0
,因此null < (new Date)
将为true
,null > (new Date)
将为false
。
当JavaScript 关系比较有效时,
Date
对象转换为其时间戳,即(The Date object).valueOf()
。
原语转换为number
,表示:
undefined
转换为NaN
; null
转换为+0
。然后按照您对操作员的期望在每个项目之间进行比较。请注意,涉及NaN
的任何比较都会计算为false。