JS数组的一些坑

判断是否为数组

在js里,用 typeof 判断 Array 数组其实返回的是 Object对象。所以不能直接用 typeof 来检测一个变量存的地址是否为数组。可用 instanceof 或者 Array.isArray() 来判断

let listmy = new Array();

//Array.isArray() 检测是否为数组,若是,返回 true 否 返回false
console.log(Array.isArray(listmy));
//instanceof 运算符 可以检测是否为数组
console.log(arr1 instanceof Array);
某些操作会改变原数组

萌新初次接触 var 数组A=数组B 的时候,都会认为它是将数组B的内容赋值给了数组A。但是实际并不是这样。

我们需要了解数据存储中 的存在,我们常见的简单数据类型的值有:string、number、boolean、undefined、null。它们是将值存在 中,所以也叫值类型,若是 var 字符串A=字符串B 它确实是将变量字符串B的值赋值给了字符串A的变量。

而复杂类型的值如: Object(对象)、Array(数组)等,是通过 中引入地址,存放在 中。
var 数组A=数组B ,仅只是将 数组A 该变量标识符下 的地址 复制给了 数组B。当调用的数组B中的数据改变后,数组A也将会发生改变 (类似Pr的嵌套)

正确赋值的方法为:var 数组A = […数组B]

let arr1 = [1, 4, 2, 5, 3];
//将arr1对应的值的内存地址绑定到arr2变量
let arr2 = arr1;
//当arr2改变数组内容时,arr1也随之改变
let temp = arr2.sort((a, b) => b - a);
console.log(temp);

发表回复