Next.js项目中空数组被识别为object类型的原因是什么?
空数组被
typeof判定为object的原因 该现象是JavaScript的原生设计逻辑,和Next.js框架无关:
- 数组属于引用类型,本质是
Array构造函数的实例,Array的原型链最终继承自Object typeof运算符的设计规则就是所有非基础类型(String/Number/Boolean/Undefined/Symbol/BigInt)的非null值,统一返回object,所以空数组和普通对象都会被判定为object,这是历史遗留的设计限制,并非代码逻辑错误

正确判断数组类型的方案
方案1:使用Array.isArray()(项目首选)
ES5推出的专用数组判定API,对空数组也能正确返回布尔值,所有现代浏览器都支持,Next.js项目可直接使用:
const arr = [] console.log(Array.isArray(arr)) // 输出:true
方案2:使用Object.prototype.toString.call()(全兼容)
可以准确区分所有内置引用类型,兼容ES3及以上的所有运行环境,适合需要兼容极端老旧环境的场景:
const arr = [] console.log(Object.prototype.toString.call(arr) === '[object Array]') // 输出:true
注意事项
避免使用instanceof Array做数组判定:如果运行环境存在多个iframe,不同iframe的Array构造函数是相互独立的,跨iframe传递的数组会被instanceof误判为非数组。
内容的提问来源于stack exchange,提问作者MooreJohn90
相关产品推荐
相关产品推荐

