JavaScript返回值

有木有大佬帮忙瞅瞅,怎么让它返回数据呢,现在返回的时undefined


    function send(method, url, type, data){
        let xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
            if(xhr.readyState === 4){
                if(xhr.status === 200){
                    const msg = JSON.parse(xhr.responseText);
                    // console.log(msg)
                    return msg
                }else {
                    return 1
                }
            }
        }
        xhr.open(method, url, true)
        xhr.setRequestHeader("type", type)
        if(method === "GET"){
            xhr.send()
        }else {
            xhr.send(JSON.parse(data))
        }
    }

const msg = JSON.parse(xhr.responseText);
这里就应该返回数据了,具体你抓包看看,是不是服务器没返回,或者状态码不是200

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7407140
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:js前端获取后台对象直接输出有值,但取对象属性为undefined的问题
  • 除此之外, 这篇博客: JavaScript基础语法总结(一)中的 Undefined 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • console.log(undefined+1); // NaN
    console.log(undefined+NaN); // NaN
    console.log(undefined+true); // NaN
    console.log(undefined+'aaa'); // undefinedaaa
    console.log(undefined+undefined); // NaN
    
    
  • 您还可以看一下 张长志老师的通俗易懂的JavaScript模块化规范教程(含资料)课程中的 01. JS模块化_入门介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在JavaScript中,我遇到的问题是如何判断两个对象是否相等。这里提供了两种方法。

    第一种方法是通过比较两个对象的键和值的方式来判断它们是否相等。首先使用Object.getOwnPropertyNames()方法分别获取两个对象的所有属性名,并将它们存储在两个数组中。然后比较两个数组的长度,如果不相等,则返回false。如果长度相等,则通过循环遍历数组来比较每个属性的键和值是否相等。如果有任一属性的键或值不相等,则返回false。如果循环结束后没有返回false,则说明两个对象相等,返回true。

    function isObjectValueEqual(a, b) {
      var aProps = Object.getOwnPropertyNames(a);
      var bProps = Object.getOwnPropertyNames(b);
    
      if (aProps.length !== bProps.length) {
        return false;
      }
    
      for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];
        var propA = a[propName];
        var propB = b[propName];
        if (propA !== propB) {
          return false;
        }
      }
      return true;
    }
    
    let obj1 = {
      a: 1,
      b: 2
    }
    let obj2 = {
      b: 2,
      a: 1
    }
    console.log(isObjectValueEqual(obj1, obj2)); // true
    

    第二种方法是在第一种方法的基础上进一步处理对象的嵌套情况。与第一种方法类似,首先比较两个对象的属性数量是否相等。然后通过循环遍历每个属性,如果属性值为对象,则递归调用该函数进行深层比较。如果存在任意属性的键或值不相等,则返回false。如果循环结束后没有返回false,则说明两个对象相等,返回true。

    function isObjectValueEqualNew(a, b) {
      var aProps = Object.getOwnPropertyNames(a);
      var bProps = Object.getOwnPropertyNames(b);
      if (aProps.length != bProps.length) {
        return false;
      }
      for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i]
        var propA = a[propName]
        var propB = b[propName]
        if ((typeof (propA) === 'object')) {
          if (this.isObjectValueEqualNew(propA, propB)) {
            return true
          } else {
            return false
          }
        } else if (propA !== propB) {
          return false
        } else {
          //
        }
      }
      return true
    }
    
    let obj1 = {
      a: 1,
      b: 2,
      c: {
        d: 4,
        e: {
          f: 5,
          e: 6
        }
      }
    }
    let obj2 = {
      b: 2,
      a: 1,
      c: {
        e: {
          e: 6,
          f: 5
        },
        d: 4
      }
    }
    console.log(isObjectValueEqualNew(obj1, obj2)); // true
    

    以上是通过比较对象的键和值来判断对象是否相等的方法。希望能够帮到你!如果还有其他问题,请随时提问。