检查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在输入特定数据类型时显示带有消息的字符串。只是为了练习。