不一样的判断

724 阅读1分钟

前言

不知道你是否想过如何判断一个变量的值是否是[{},...]或者{},本文分享三种方法。

  1. 网友给的方法
  2. 百度搜索到的方法
  3. 自己写的方法

网友给的方法

代码如下:

function isJSON(str) {
  try {
    JSON.parse(str)
    return true
  } catch {
    return false
  }
}

这种方法是有问题的,当传入的参数是[{},...]或者{}返回的是false,不太符合期望。

百度到的方法

代码如下:

function isJSON(obj) {
  return typeof (obj) == 'object' &&
    Object.prototype.toString.call(obj).toLowerCase() == '[object object]'
    && !obj.length
}

这份代码的问题在于当传入参数是{length:1}的时候,返回的是fasle,一样不符合期望。

自己写的方法

代码如下:

/**
 * @function 判断obj是否是[{},...]或者{}
 * @param obj {any}
 * @returns {boolean}
 */
function isJSON(obj) {
  if (typeof obj === 'object') {
    const lowercase = Object.prototype.toString.call(obj).toLowerCase()
    if (lowercase === '[object array]') {
      for (let i = 0; i < obj.length; i++) {
        let flag = isJSON(obj[i])
        if (!flag) {
          return false
        }
      }
      return true
    } else if (lowercase === '[object object]') {
      return true
    } else {
      return false
    }
  } else {
    return false
  }
}

//方法的调用
console.log(isJSON({}))//true
console.log(isJSON([{}]))//true
console.log(isJSON([{},'']))//false

这个方法可以判断一个变量的值是否是[{},...]或者{}

可能有人觉得我这个内容没有意义,但是我觉得只有想清楚问题,给出符合期望的解决方案,本身就是意义。

谢谢阅读!