JS如果未定义的条件

时间:2016-10-02 03:32:32

标签: javascript

我有一个像这样的用户数据库:

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。是否可以将undefinedcurrentDate对象进行比较?或者我是否需要先检查trialExpDate是否存在?

3 个答案:

答案 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对象与undefinedNaN之间进行比较,被评估为false。但是,对于null,其评估为+0,因此null < (new Date)将为truenull > (new Date)将为false

当JavaScript 关系比较有效时,

  1. Date对象转换为其时间戳,即(The Date object).valueOf()

  2. 原语转换为number,表示:

    • undefined转换为NaN;
    • null转换为+0
  3. 然后按照您对操作员的期望在每个项目之间进行比较。请注意,涉及NaN的任何比较都会计算为false。