TypeScript声明数组后typeof返回object的原因及解决方法
解决TypeScript/Ionic中数组typeof返回"object"的问题
嘿,这其实是JavaScript本身的特性,不是Ionic或者TypeScript的bug哦!在JS里,数组本质上是特殊的对象类型,所以用typeof检测数组时,它会返回"object",这完全是正常现象。
要正确判断一个值是不是数组,你可以用下面几种靠谱的方法:
最推荐:使用
Array.isArray()方法
这是ES5之后新增的标准方法,专门用来判断数组,兼容性好且结果准确:if (Array.isArray(this.products)) { console.log("this.products 确实是数组!"); // 在这里执行你的数组操作逻辑 }兼容旧环境的兜底方案:
Object.prototype.toString.call()
如果你的项目需要兼容非常老旧的浏览器(现在基本很少见了),可以用这个方法,它能精准判断值的内部类型:if (Object.prototype.toString.call(this.products) === "[object Array]") { console.log("这是一个数组"); }结合TypeScript静态类型检查
既然你用TypeScript开发,提前给products声明数组类型,能在编译阶段就避免非数组赋值的问题,比如:// 假设你有Product类型,或者用any[]也可以 products: Product[] = []; // 之后如果不小心给它赋值非数组,TS编译时就会报错 this.products = "不是数组"; // 这里会直接提示类型错误
补充一句:typeof只能准确识别基本类型(string、number、boolean、undefined、symbol、function),对于对象、数组、null都会返回"object",所以判断数组千万别用它~
内容的提问来源于stack exchange,提问作者Gabriel Augusto
相关产品推荐
相关产品推荐

