【问题标题】:Strange behaviour: if( takes boolean false奇怪的行为: if( 取布尔值 false
【发布时间】:2021-10-27 14:48:54
【问题描述】:

您好,如果用户想要接收电子邮件,我正在编写一个 firebase 云函数来发送电子邮件。问题是,如果 userData.notifications.emails 为真或假,它总是会发送电子邮件。日志显示为 false:

Send Emails YES: false 
 if (userData?.notifications?.emails) {
       functions.logger.log('Send Emails YES: ' + userData.notifications.emails);
       admin.firestore().collection(`emails`).add({
             to: email,
             message: {
               subject: subject,
               html: text,
             }
        })
 }
 else {
      functions.logger.log('Don't send Email')
 }

【问题讨论】:

  • 你试过userData?.notifications?.emails === true吗?
  • 如果userData.notifications.emails 是字符串“false”而不是布尔值false,它将评估为true
  • 字符串“false”仍为真,仍将被评估为真
  • 您有一个if 及其条件。你看到正在执行的身体,所以你知道条件是真实的。您会看到将它连接到一个字符串会得到"false"。为什么停在那里?显然它不是布尔值 false,因为之前的观察 - 所以它必须是 "false"{ toString: () => false } 之类的东西(大多数没有意义,因为它是 firebase,而且已经很明显它是什么了,但这不是重点),为什么不添加检查或调试,看看它实际上是什么?

标签: javascript node.js firebase


【解决方案1】:

感谢cmets!我尝试了很多不同的东西,但一定错过了简单的东西...... Firebase 确实将对象作为字符串传递,因此它现在首先再次将其解析回布尔值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2021-12-31
    • 2012-12-01
    • 2016-06-29
    • 2014-06-20
    • 1970-01-01
    • 2015-12-22
    • 2012-06-21
    相关资源
    最近更新 更多