代码编织梦想

伪数组

伪数组的特点

  1. 伪数组拥有数组的属性,
    -具有 length 属性 但length属性不是动态的,不会随着成员的变化而变化
    -按索引方式储存数据
    -不具有数组的push(), forEach()等方法
  2. 伪数组本质是一个 Object,而真实的数组是一个 Array。
    伪数组的原型 Object.__prototype__ 通过改变原型指向可以将伪数组转为真数组

常见伪数组

  1. 函数内部的 arguments,扩展操作符可以将 arguments 展开成独立的参数
  2. DOM 对象列表 如 通过 document.getElementByTags 获取的 dom元素
  3. jQuery对象 如 $(‘div’)
// 伪数组
var arrLike = {
    0: 'a',
    1: 'b',
    2: 'c',
    length: 3,
};

伪数组转为真数组

  1. 遍历添加入一个空数组
var arr = [];
for(var i = 0; i < arrLike.length; i++){
   arr.push(arrLike[i]);
}
  1. 利用数组的slice()方法
;[].slice.call(arrLike);
//slice() 方法以新的数组对象,返回数组中被选中的元素。

或者

Array.prototype.slice.apply(arrLike);

使用slice()返回一个新的数组,用call()或apply()把他的作用环境指向伪数组。slice 返回的数组中,不会保留索引值以外的其他额外属性。

模拟 slice() 内部实现

Array.prtotype.slice = function(start, end){
        var result = new Array();
        var start = start | 0;
        var end = end | this.length;for(var i = start; i < end; i++){
            result.push(this[i]);
        }
        return result;
    }
  1. 改变原型指向
arrLike.__proto__ = Array.prototype;

通过改变原型指向,arrLike就继承了Array.prototype中的方法,可以使用push(),unshift()等方法了,length值也会随之动态改变。

这种直接修改原型链的方法,还会保留下伪数组中的所有属性,包括不是索引值的属性

  1. Array.from()
    Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。
 var arr = Array.from(arrLike);

只保留索引值内的属性

如何判断数组

1.使用instanceof

arr instanceof Array

大部分情况都可以用instanceof判断是否是数组,但是在判断一个变量是对象或非对象时,会存在坑,
因为 instanceof 在判断数组时,即会把数组当做Array类型,又会把数组当做Object类型,所以要严格验证一个数组,最好是用constructor,能严格区分数组和对象。

2.使用constructor

console.log([].constructor == Array);  //true
console.log({}.constructor == Object);  //true
console.log("string".constructor == String); //true
console.log((123).constructor == Number);  //true
console.log(true.constructor == Boolean);  //true

3.使用Object.prototype.toString.call(arr) === ‘[object Array]’, 重点记住object Array

4.使用Array.isArray 判断

Array.isArray([1, 2, 3]);
// true
Array.isArray({foo: 123});
// false
Array.isArray("foobar");
// false
Array.isArray(undefined);
// false
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42285872/article/details/123730566

js中什么是伪数组,怎么将伪数组转化为标准数组?_zlq_csdn的博客-爱代码爱编程_js中什么是伪数组

伪数组就是:具有0到length-1的属性,并有length属性 一般获取到的DOM元素或者jQuery获取到的元素都是伪数组。 伪数组: 将伪数组转化为标准数组需要用到数组原型中的方法 slice //需要使用到

伪数组是什么?伪数组与数组的区别-爱代码爱编程

当我们了解伪数组之前先了解下普通的数组的特点 数组是用来存储一系列值的一个集合,而每个值在数组里面都有一个对应的索引,也可以叫做下标,索引是从0开始的,依次递增。 比如: let arr = ['a','b','c']; // 字符串a,b,c对应的下标分别为0, 1, 2,使用 数组名字[索引] 的方法即可取到对应的值 数组的length为数组当中

在JavaScript中什么是伪数组?如何将伪数组转化为标准数组-爱代码爱编程

伪数组的定义: 1,具有length属性 2,按索引方式存储数据 3,不具有数组的push,pop等方法 常见的伪数组: arguments,NodeList(querySelector)、HTMLCollection (getElementByTagName),jQuery对象 <!DOCTYPE html> <html

如何把一个伪数组转化成真正的数组?-爱代码爱编程

这是最近的一个面试题,一开始看到他的时候觉得很懵,因为我还没见过他的概念,更谈不上用过了,回来立马百度了下,在这做一个总结。有不对的地方欢迎大家指正,互相学习 一. 什么是真数组(数组) 所谓真数组,其实可以直接称为:数组。 当一个对象具有以下特点时,可以称为数组: 可以按照索引的方式,存储多个数组;具有length属性,表示数组内数据的长度(个数)

在 Javascript 中什么是伪数组?如何将伪数组转化为标准数组?-爱代码爱编程

在 Javascript 中什么是伪数组?如何将伪数组转化为标准数组? 1、前言 ​ 今天博主JavaScript高级进阶学完了,于是在度娘上找了几套面试题,发现这个题不知道怎么答,并且感觉这道面试图也挺经典的,所以拿出来跟大家一起学习一下,如果这真是面试题估计我就凉凉了,所以还请各位博友认真对待,那么我们开始喽! 2、什么是伪数组(NodeList

什么是伪数组?以及伪数组转数组的方法-爱代码爱编程

概念:伪数组是一个 Object,而真实的数组是一个 Array,具体的来说:伪数组是一个对象、具有length属性、按照索引方式存储数据、不具有数组的push,pop等方法… 经典伪数组 arguments 是一个类数组对象,代表传给一个function的参数列表,是参数的集合,扩展操作符可以将 arguments 展开成独立的参数。 常用的伪数组

微信小程序实现拆红包动画-爱代码爱编程

1.实现效果 2.实现原理 wx.createAnimation(Object object):创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。 点击红包,弹出红包弹框,用到过渡动画this.animation.translate(

react hook 使用规则-爱代码爱编程

Hook 规则 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 Hook 本质就是 JavaScript 函数,但是在使用它时需要遵循两条规则。我们提供了一个 linter 插件来强制执行这些规则: 只在最顶层使用 Hook 不要在循环,条件或嵌套函数中调用

Whistle 的使用和安装-爱代码爱编程

1、简要介绍 whistle 是基于 node 实现的跨平台 web 调试工具,主要用于查看、修改 HTTP、HTTPS、Websocket 的请求、响应;(同类工具有 windows 平台上的 Fiddler ) 参考:代理和反向代理 2、安装和使用 1、安装 whistle 依赖于 node ,所以安装 whistle 之前要先安装 node

使用虹软SDK实现离线人脸识别(局域网)-爱代码爱编程

第一步,获取SDK 首先注册开发者账号,创建一个应用,得到两个东西,用于激活SDK引擎的,SDK key 和 AppID。 把SDK下载到本地,我这里选择的是java版本的, 文件夹中包括开发者文档、API文档、示例程序、jar包、引擎库dll文件。 第二步,写后台 把文件夹中的jar包复制到项目中的lib(自己创建的)文件夹下, 依赖这样写:

在JS中什么是伪数组?如何将其转换为标准数组?-爱代码爱编程

在JS中,数组表示有序数据的集合,而对象表示无序数据的集合。 伪数组也是一个对象; 伪数组特性:         1.具有length属性;         2.按索引方式存储数据;         3.没有数组的push、shift、pop等方法; 伪数组的生成:         1. function的arguments对象;     

秒杀项目(三)之商品展示&&CRUD-爱代码爱编程

目录 一、搭建商品展示页面         1、搭建商品展示的页面                 1、先看整个效果图                 2、搭建商品展示页面的思路                 3、找到layui官方文档,找到选项卡                 4、定位到数据表格,将代码编写到goodsList.js

什么是伪数组?如何将伪数组转化为标准数组?_什么是伪数组,如何将伪数组转化为-爱代码爱编程

什么是伪数组? 1. 伪数组的基本特征   ① 无法直接调用数组方法   ② 可以用对真正数组遍历方法来遍历它们   ③ 具有 length 属性 2. 常见的伪数组 函数内部的 arguments 参数DOM