NodeJS / JavaScript if语句不起作用

时间:2016-07-01 23:32:26

标签: javascript if-statement undefined typeof

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'
  //--

3 个答案:

答案 0 :(得分:3)

如果您要检查未定义的内容,可以执行以下操作之一:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

我更愿意检查

if(!qData.osType)