【问题标题】:NodeJS / JavaScript if statement not workingNodeJS / JavaScript if 语句不起作用
【发布时间】:2016-07-01 23:32:26
【问题描述】:

NodeJS(最新)。

我有以下代码。为什么第一个 IF 语句没有按预期工作?该控件不会进入第一个 IF 语句。

我在以下代码的第一行看到有效的 console.log 输出,并且期望第一个 IF 语句也应该执行它的代码。但事实并非如此;第二个 IF 语句有效。

  console.log("-- inside create IP() qData['osType'] is set to :: " + qData['osType'])
  //--
  if ( qData['osType'] == 'undefined' ) {
    console.log("1 -- setting qData['osType'] = Linux by default for now. This should happen automatically.")
    qData['osType'] = 'Linux'
    console.log("1 -- inside create IP() if-statement-qData['osType'] and qData['osType'] is set to :: "+qData['osType'])
  }
  if ( typeof qData['osType'] == 'undefined' ) {
    console.log("2 -- setting qData['osType'] = Linux by default for now. This should happen automatically.")
    qData['osType'] = 'Linux'
    console.log("2 -- inside create IP() if-statement-qData['osType'] and qData['osType'] is set to :: "+qData['osType'])
  }
  qData['osType'] = 'Linux'
  //--

【问题讨论】:

  • 了解您的 qData 对象是什么样子会有所帮助
  • 嗯,因为qData['osType'] != (typeof qData['usType'])
  • 请注意,这与 Node.js 无关,这只是标准的 JS 行为。
  • 谢谢,我同意 nnnnnn 是 JS

标签: javascript if-statement undefined typeof


【解决方案1】:

如果您正在检查未定义性,您可以执行以下操作之一:

  • typeof foo === 'undefined'
  • foo === undefined
  • foo === void 0

其他任何东西实际上都不是(严格地)检查未定义的值(包括直接将值与字符串'undefined' 进行比较)。

【讨论】:

  • 不知道 === 是否有效。我会试试的。
【解决方案2】:

在您的第一个 if 语句中,qData['osType'] 的计算结果为 undefined,但您的比较是检查是否为 undefined == "undefined"。字符串文字有一个值,因此不等于undefined

在您的第二个 if 语句中,typeof qData['osType'] 的计算结果为字符串 "undefined",因此表达式的计算结果为 true 并执行您的代码块。

【讨论】:

    【解决方案3】:

    我认为 qData['osType'] == 'undefined' 必须重写为 qData['osType'] == undefined

    我更喜欢检查

    if(!qData.osType)
    

    【讨论】:

    • 这并不完全等价,因为对于其他值,包括 0false'',该条件计算结果为 true
    • 如果qData.osTypenull,即使== undefined 也会为真。
    猜你喜欢
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2012-11-30
    • 2015-03-28
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多