- 伪数组
- NodeList(dom.querySelectorAll等获取)
- Arguments对象
- FileList对象
- String对象
const foo = (a,b,c) => arguments;
const args = foo(1,2,3,4);
for(let item of args) {
console.log(item);
}// 1
// 2
// 3
// 4// 检验arguemnts对象类型
args instanceof Object;
// true
Object.prototype.toString.call(args);
// "[object Arguments]"
- 手动创建伪数组对象
const arrayLike = {
1: "AAA",
3: "CCC",
5: "BBB",
length: 6
};
// 复用数组方法
[].forEach.call(arrayLike, (item, i) => console.log(item, i));
// AAA 1
// CCC 3
// BBB 5
对于数组和伪数组,在数组的标准方法中,只有concat方法是不通用的
console.log([].concat.call(arrayLike, [7, 8]));
// [ { '1': 'AAA', '3': 'CCC', 5: "BBB", length: 6 }, 7, 8 ]
console.log([1, 2].concat([7, 8]));
// [ 1, 2, 7, 8 ]// 解决方案1. slice[].concat.call([].slice.call(arrayLike), [7, 8]);
2. Symbol.isConcatSpreadablearrayLike[Symbol.isConcatSpreadable] = true;
[].concat.call(arrayLike, [7, 8]);
// [empty, "AAA", empty, "CCC", empty, "BBB", 7, 8]
- 伪数组对象和数组的转换
- Array.from
- 扩展运算符
- Object.entries
console.log(Array.from(args));
// [1,2,3,4]
console.log([...args]);
// [1,2,3,4]
console.log(Object.entries(args).map(([,val]) => val));
// [1,2,3,4]
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- javascript|javascript中的数据类型转换