判断一个变量是不是数组,最靠谱的方法是使用array.isarray(),它能准确识别数组并避免跨全局上下文的判断错误,1. array.isarray()是首选方案,直接返回true或false,不受iframe等环境影响;2. instanceof array在跨全局上下文(如iframe)时会失效,因不同全局环境的array构造函数不相等;3. object.prototype.tostring.call()能正确判断数组及其他内置类型,曾是es5前最可靠方法,适用于通用类型检测;4. 其他方法如constructor或typeof不可靠,前者易被篡改且受上下文限制,后者对数组返回'object'无法区分。因此,应优先使用array.isarray()进行数组判断,该方法简洁、安全、兼容性强,是现代javascript开发中的标准实践。

在JavaScript里判断一个变量是不是数组,最靠谱、最直接的方式就是用
Array.isArray()
要判断一个变量是不是数组,我的首选,也是强烈推荐的方法,就是使用
Array.isArray()
true
false
let myArr = [1, 2, 3];
let myObj = { a: 1 };
let myStr = "hello";
console.log(Array.isArray(myArr)); // true
console.log(Array.isArray(myObj)); // false
console.log(Array.isArray(myStr)); // false
console.log(Array.isArray(null)); // false
console.log(Array.isArray(undefined)); // false这个方法好就好在它非常稳健,不会被一些复杂的JavaScript运行环境(比如iframe)所迷惑。
Array.isArray()
说实话,在
Array.isArray()
instanceof Array
Object.prototype.toString.call(variable) === '[object Array]'
Array.isArray()
instanceof Array
Array
Array.isArray()
instanceof Array
instanceof
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
let obj = {};
console.log(obj instanceof Array); // false但它的“阿喀琉斯之踵”就在于,它要求被检测的对象和构造函数必须在同一个JavaScript全局上下文中。这听起来有点抽象,但最常见的场景就是上面提到的iframe。
<!-- index.html -->
<iframe id="myFrame" src="about:blank"></iframe>
<script>
const iframe = document.getElementById('myFrame');
const iframeDoc = iframe.contentWindow.document;
// 在iframe中创建数组
const iframeArray = iframe.contentWindow.Array(1, 2, 3);
iframeDoc.body.appendChild(iframeDoc.createElement('div')); // 确保iframe内容加载
// 在父窗口判断这个数组
console.log(iframeArray instanceof Array); // 可能会是 false!
console.log(Array.isArray(iframeArray)); // 总是 true
</script>这里,
iframeArray
Array
Array
Array
Array
instanceof
instanceof Array
Object.prototype.toString.call()
这个方法,我个人觉得它有点像JavaScript里的“万能探测器”。
Object.prototype.toString
toString()
toString()
Object.prototype.toString()
[object Type]
比如:
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call(new Date()));// "[object Date]"
console.log(Object.prototype.toString.call(Math)); // "[object Math]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"所以,你可以通过判断
Object.prototype.toString.call(variable) === '[object Array]'
这个方法的好处是,它和
Array.isArray()
[[Class]]
Symbol.toStringTag
Array.isArray()
Date
RegExp
Function
Array.isArray()
Array.isArray()
Object.prototype.toString.call()
当然,还有一些不那么推荐,但你可能会在老代码里或者某些特殊场景下看到的判断方法。比如检查
constructor
let arr = [1, 2, 3]; console.log(arr.constructor === Array); // true
这个方法和
instanceof
constructor
另外,你可能也会想到
typeof
typeof
'object'
typeof
总结一下,JavaScript里判断数组,现在就是
Array.isArray()
Object.prototype.toString.call()
以上就是js如何判断变量是否为数组的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号