Javascript 未定义的JS If条件

Javascript 未定义的JS If条件,javascript,Javascript,我有这样一个用户数据库: const user = { subscription: { plan: 'free_trial', }, }; 在用户更改计划之前,我需要检查一些条件 const currentDate = new Date(); if (user.subscription.trialExpDate > currentDate) { // do something } else { // trialExpDate is either undefined

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

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;
}
const currentDate=新日期();
如果(user.subscription.trialExpDate>currentDate){
//做点什么
}否则{

//trialExpDate未定义或我建议使用
hasownproperty
进行检查。 样本:

if(user.subscription.hasOwnProperty('trialExpDate')&&user.subscription.trialExpDate>currentDate){
//做点什么
}否则{

//trialExpDate未定义或我建议使用
hasownproperty
进行检查。 样本:

if(user.subscription.hasOwnProperty('trialExpDate')&&user.subscription.trialExpDate>currentDate){
//做点什么
}否则{

//trialExpDate未定义或您只需检查它是否为
null

if (user.subscription.trialExpDate != null || user.subscription.trialExpDate > currentDate) {
    // do something
}
else {
    // do something else
}

变量!=null
将同时检查变量是否为null或未定义。

您只需检查它是否为
null

if (user.subscription.trialExpDate != null || user.subscription.trialExpDate > currentDate) {
    // do something
}
else {
    // do something else
}

变量!=null
将同时检查变量是否为null或未定义。

简而言之:如果您确定
user.subscription.trialExpDate
不能为
null
,使用原始代码是非常好的

如果
user.subscription
始终存在且始终是一个对象
,则将
日期
对象与
未定义
NaN
之间的比较评估为
。但是,对于
,评估为
+0
,因此
(新日期)
将为
true
null>(新日期)
将为
false

当JavaScript关系式比较起作用时

  • Date
    对象被转换为其时间戳,即
    (日期对象)。valueOf()

  • 原语被转换为
    数字
    ,这意味着:

    • 未定义的
      转换为
      NaN
    • null
      转换为
      +0
  • 然后,按照您对操作员的期望,在每个项目之间执行比较。请注意,任何涉及
    NaN
    的比较计算结果都为false


  • 简而言之:如果您确定
    user.subscription.trialExpDate
    不能为
    null
    ,使用您的原始代码是非常好的

    如果
    user.subscription
    始终存在且始终是一个对象
    ,则将
    日期
    对象与
    未定义
    NaN
    之间的比较评估为
    。但是,对于
    ,评估为
    +0
    ,因此
    (新日期)
    将为
    true
    null>(新日期)
    将为
    false

    当JavaScript关系式比较起作用时

  • Date
    对象被转换为其时间戳,即
    (日期对象)。valueOf()

  • 原语被转换为
    数字
    ,这意味着:

    • 未定义的
      转换为
      NaN
    • null
      转换为
      +0
  • 然后,按照您对操作员的期望,在每个项目之间执行比较。请注意,任何涉及
    NaN
    的比较计算结果都为false



  • 什么是
    user.subscription.trialExpDate
    ?它是字符串吗?请尝试
    newdate(user.subscription.trialExpDate)
    user.subscription.trialExpDate
    未定义的
    日期或
    对象
    未定义的>新日期();
    将始终为
    false
    。我会在比较之前测试该值。是的,这是我的问题。因此,在执行其余代码之前,您会先测试它是否未定义?即使它返回相同的答案和较短的代码?我当然会测试它。这将使我的代码更具可读性。
    user.subscriptio是什么n、 trialExpDate
    ?它是一个字符串吗?请尝试
    新日期(user.subscription.trialExpDate)
    user.subscription.trialExpDate
    未定义的
    日期
    对象
    未定义的>新日期();
    将始终为
    false
    。我会在比较之前测试该值。是的,这是我的问题。因此,在执行其余代码之前,您会先测试它是否未定义?即使它返回相同的答案和较短的代码?我当然会测试它。这将使我的代码更具可读性。谢谢,我会这样做:)
    trialExpDate
    不是
    user
    对象的
    ownProperty
    ,它属于
    user.subscription
    假设如何
    user.subscription.trialExpDate
    null
    ?它将返回
    hasOwnProperty
    true
    。我将使用
    if(user.subscription.trialExpDate&.)
    是的,@Rayon这是一种情况。如果我们确信不会为空,我们可以使用hasownproperty,否则我们必须按照您说的检查,谢谢,我会这样做:)
    TrialUpdate
    不是
    user
    对象的
    ownProperty
    ,它属于
    user.subscription
    如果
    user.subscription.trialEx>呢pDate
    null
    ?它将返回
    hasOwnProperty
    true
    。我将使用
    if(user.subscription.trialExpDate&…)
    是的,@Rayon这是一种情况。如果我们确信不会为空,我们可以使用hasownproperty,否则我们必须按照您所说的检查您可以在这里阅读更多内容:如果
    user.subscription.trialExpDate
    0
    ,我会有一个函数来测试它是否是有效的
    日期
    。然后他也可以检查我是否t确实是
    0
    。您可以在这里阅读更多内容:如果
    user.su怎么办