Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查JavaScript中数组的数据类型和空值_Javascript - Fatal编程技术网

检查JavaScript中数组的数据类型和空值

检查JavaScript中数组的数据类型和空值,javascript,Javascript,我试图根据数据类型输出一个字符串。我遇到了数组和空值的问题。以下是我取得的成绩: let result = '' switch (typeof(data)) { case 'string': result += 'String!' break case Array: result += 'Array!' break case 'null': result += 'Null!' break retu

我试图根据数据类型输出一个字符串。我遇到了数组和空值的问题。以下是我取得的成绩:

let result = ''

switch (typeof(data)) {
    case 'string':
      result += 'String!'
      break
    case Array:
      result += 'Array!'
      break
    case 'null':
      result += 'Null!'
      break

return result

如何在switch语句中检查这些数据类型?

typeof在与数组或null一起使用时返回“object”,因此不能使用它来测试数组或null。我建议使用Array.isArraydata检查它是否为数组,使用data==null检查它是否为null。显然,这不适合switch语句,因此我建议不要在这种情况下使用switch语句。

如果您确实想使用switch,可以执行以下操作:

switch (true) {
    case typeof data == 'string':
      result += 'String!'
      break
    case Array.isArray(data):
      result += 'Array!'
      break
    case data===null:
      result += 'Null!'
      break
}
事实上,如果不了解更多的用例,就很难判断它是否是正确的设计。在这里使用一些简单的if切换并没有真正的好处。

您可以使用data.constructor==Array是数组的类型

switch (true) {
  case typeof data == 'string':
    result += 'String!'
    break
  case data.constructor === Array:
    result += 'Array!'
    break
  case data === null:
    result += 'Null!'
    break
}

如果要求代码在switch语句中结束,则可以为该情况派生自己的定义:

let result = ''
let type = data === null
  ? 'null'
  : data === undefined
  ? 'undefined'
  : Array.isArray(data)
  ? 'array'
  : typeof data

switch (type) {
  case 'null':
    result += 'null!'
    break
  case 'undefined':
    result += 'undefined!'
    break
  case 'array':
    result += 'array!'
    break
  case 'string':
    result += 'string!'
    break
  case 'number':
    result += 'number!'
    break
  case 'function':
    result += 'function!'
    break
  default:
    result += 'unknown!'
    break
}

return result
但使用单个表达式而不使用开关可能更简单:

const getType = data =>
  data === null
  ? 'null'
  : data === undefined
  ? 'undefined'
  : Array.isArray(data)
  ? 'array'
  : typeof data

return getType(data)

typeof应该返回结果,为什么要使用switch..case它被映射到一个新值,比如string->string等等。不过,我并没有真正理解这一点。但出于某种原因,必须有OP这样做或不这样做@AkhilAravind在输入特定数据类型时显示带有消息的字符串。只是为了练习。