You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Javascript:无需IF判断获取数组元素的实际类型

问题分析

你遇到的核心问题是**prompt()方法的返回值永远是字符串类型**——不管你输入的是数字、布尔值还是其他内容,它都会把输入内容转成字符串返回,所以你的数组里所有元素自然都是string类型啦。

要获取元素的实际类型,我们需要先把字符串形式的输入转换成对应的数据类型,再去检测它的真实类型,而且完全可以不用if语句实现。


无需if语句的解决方案

步骤1:转换输入为实际类型

我们可以用JSON.parse()来尝试把输入的字符串解析成对应类型,解析失败的话就保留原字符串(比如普通文本)。这里用try-catch处理解析错误,它不属于if语句范畴:

function convertInput(str) {
  try {
    return JSON.parse(str);
  } catch(_) {
    return str;
  }
}

这个函数能处理大多数常见场景:

  • 输入"123" → 转成number类型的123
  • 输入"true" → 转成boolean类型的true
  • 输入"[1,2,3]" → 转成array类型的[1,2,3]
  • 输入"hello" → 解析失败,返回原字符串"hello"

步骤2:精确检测类型(无if语句)

利用Object.prototype.toString.call()方法可以获取值的精确类型,这个方法返回类似[object Number]的字符串,我们通过字符串切片提取类型名称即可,全程不需要if:

function getActualType(value) {
  return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}

它能准确区分各种类型:

  • getActualType(123) → "number"
  • getActualType(true) → "boolean"
  • getActualType([1,2]) → "array"
  • getActualType(null) → "null"

完整修改后的代码

script.js

var tab = [];

// 转换输入为实际类型的函数
function convertInput(str) {
  try {
    return JSON.parse(str);
  } catch(_) {
    return str;
  }
}

// 获取精确类型的函数
function getActualType(value) {
  return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}

// 收集用户输入,用短路运算代替if处理取消操作
do {
  const input = prompt("Write some type of value!");
  input !== null && tab.push(convertInput(input));
} while(confirm("Next value?"));

// 输出每个元素的实际类型
for (var i = 0; i < tab.length; i++) {
  document.write(`${getActualType(tab[i])}<br>`);
}

index.html

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="author" content="Donio3d">
</head>
<body>
  <script src="script.js"></script>
</body>
</html>

补充说明

如果需要支持输入"undefined"的情况(JSON不支持解析undefined),可以给convertInput函数加个小处理,用三元运算符代替if:

function convertInput(str) {
  return str === "undefined" ? undefined : 
         (() => { try { return JSON.parse(str); } catch(_) { return str; } })();
}

另外,Object.prototype.toString.call()是JS中最可靠的类型检测方法之一,比typeof更精确——比如它能区分array和object,而typeof对数组返回的是object。

内容的提问来源于stack exchange,提问作者Donio3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:57:17