【问题标题】:how to do an if statement in javascript to check if a JSON array is empty?如何在javascript中执行if语句来检查JSON数组是否为空?
【发布时间】:2019-03-21 14:49:06
【问题描述】:

我正在尝试来自堆栈溢出的各种答案来编写一个 if 语句,该语句检查 JSON 数组是否已填充或为空。但是,console.log 总是返回 undefined。我使用 node.js 和 webstorm 作为 IDE。我可以得到一些帮助来解决这个问题吗?

function selectData(){
    var sql = "SELECT * FROM cust where LastName = '" +registerArray[0]+"'";
    con.query(sql, function (err, result) {
        console.log(JSON.stringify(result)); //correctly displaying stuffs from db
        if (result) { //statement not working correctly.
            var pw = "SELECT ID FROM cust where LastName = '" +registerArray[0]+"'";
            con.query(pw, function (err, result) {
                var idcheck  = JSON.stringify(result);
                console.log(result); //always shows undefined
                if (idcheck !== registerArray[0]){
                    return ("{re enter correct password}");
                } else {
                    return ("{login successfully}");
                }
            });

        } else {
            return("{sign up first}");
        }
    });
}
con.end();

}

【问题讨论】:

  • 只需执行if (result) 即可检查result 是假值还是真值
  • 您的查询容易受到“sql 注入”攻击。 con.query("SELECT * FROM cust WHERE LastName = ?", [registerArray[0]], function (err, res) { ... }) 是你要使用的
  • console.log(JSON.stringify(result)); 带给你什么?
  • @iArcadia 第二个 console.log(JSON.stringify(result)) 给出未定义
  • @KunalMukherjee 我应该如何使用它?

标签: javascript sql arrays json if-statement


【解决方案1】:

问题是您使用严格相等运算符和 con.query 如果它没有找到任何东西,它会返回一个空数组([])。 由于您使用严格比较 ([]) !== 0 解析为 TRUE 这会导致您的问题。

解决方案

您可以将您的声明更改为if (result),或者更清晰更详细的版本,if (result.length > 0 ),这将完成您正在尝试做的事情。

您可以从这篇文章中了解更多关于 JS 如何计算表达式的信息 Truthy and falsy values in javascript

【讨论】:

    【解决方案2】:

    使用 Object.keys

    function selectData(){
        var sql = "SELECT * FROM cust where LastName = '" +registerArray[0]+"'";
        con.query(sql, function (err, result) {
            console.log(JSON.stringify(result));
            if (Object.keys(result).length !== 0 ){ 
    

    【讨论】:

    • 仍然显示未定义。在我的客户端出现此错误:VM19:1 Uncaught SyntaxError: Unexpected token r in JSON at JSON.parse () at XMLHttpRequest.SendLoginData.xhttp.onreadystatechange
    • 您发布的代码不包含JSON.parse
    【解决方案3】:

    检查未定义和有项目...

    if (result !== undefined && Object.keys(result).length !== 0) {
         //you've got an object and it has some stuff 
    } else {
         //handle situation where you've got nothing
    }
    

    编辑:显然,您不应该使用 getOwnPropertyNames,因为某些安全框架会阻止它。请改用 Object.keys。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多