Javascript数组及类数组相关原理详解

Javascript数组及类数组相关原理详解

在Javascript中数组是一个非常重要的数据结构,它可以存储多个数据并进行操作。但是在实际开发中,我们还会遇到类数组对象,这些对象类似于数组但并不是数组,本文将详细介绍Javascript数组及类数组相关原理。

数组基本操作

定义数组

定义数组有两种方式,一种是通过字面量方式,另一种是通过构造函数方式。

// 字面量方式
const arr1 = [1, 2, 3];

// 构造函数方式
const arr2 = new Array(1, 2, 3);

获取数组长度

通过length属性可以获取数组的长度。

const arr = [1, 2, 3];
console.log(arr.length); // 输出:3

访问数组元素

通过下标可以访问数组中的元素。

const arr = [1, 2, 3];
console.log(arr[0]); // 输出:1

迭代数组

可以通过for循环、forEach等方法对数组进行迭代。

const arr = [1, 2, 3];
for(let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

类数组对象

类数组对象是一个包含length属性和一些数字类型属性的对象,它们看起来类似于数组,但并不是真正的数组对象。以下是一些常见的类数组对象。

arguments对象

在调用函数时,会自动生成arguments对象,这个对象就是一个类数组对象。

function test() {
  console.log(arguments);
}

test(1, 2, 3); 
// 输出: {
//  "0": 1,
//  "1": 2,
//  "2": 3,
//  "length": 3
//}

NodeList对象

NodeList对象是一个包含一组节点的类数组对象,常用于DOM操作。

<ul id="list">
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
</ul>

<script>
  const list = document.querySelectorAll('li');
  console.log(list); // 输出: NodeList(3) [li, li, li]
</script>

自定义类数组对象

我们也可以自己创建一个类数组对象。

const obj = {
  0: 1,
  1: 2,
  2: 3,
  length: 3
};

类数组转数组

类数组对象不能使用数组的方法,但我们可以通过Array.from、Array.prototype.slice.call等方法将类数组转为数组。

Array.from

Array.from方法可以将类数组对象转为数组。

const obj = {
  0: 1,
  1: 2,
  2: 3,
  length: 3
};

const arr = Array.from(obj);
console.log(arr); // 输出: [1, 2, 3]

Array.prototype.slice.call

Array.prototype.slice.call方法可以将类数组对象转为数组。

function test() {
  const arr = Array.prototype.slice.call(arguments);
  console.log(arr);
}

test(1, 2, 3); // 输出: [1, 2, 3]

示例说明

示例一:计算变量参数的总和

function sum() {
  let result = 0;
  Array.prototype.forEach.call(arguments, item => {
    result += item;
  });
  return result;
}

console.log(sum(1, 2, 3, 4)); // 输出: 10

在上面的例子中,我们通过Array.prototype.forEach方法迭代arguments对象,并进行求和操作。

示例二:类数组转数组

const nodeList = document.querySelectorAll('li');
const arr = Array.from(nodeList);
console.log(arr); // 输出: [li, li, li]

在上面的例子中,我们通过Array.from方法将NodeList转为数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript数组及类数组相关原理详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery实现动态表单验证时文本框抖动效果完整实例

    下面是“jQuery实现动态表单验证时文本框抖动效果完整实例”的完整攻略: 一、实现原理 在实现表单验证时,当用户输入错误或者未输入时,我们需要给出错误提示。为了提高提示的视觉效果,在文本框出现抖动的动画后,再展示错误提示信息。 具体实现过程如下: 给输入框添加失去焦点的事件,当输入框失去焦点时对输入框的值进行验证; 如果验证不通过,使用jQuery的动画效…

    JavaScript 2023年6月10日
    00
  • JS锚点的设置与使用方法

    当我们需要在一个较长的网页中跳转到指定页面位置或细节处的时候,往往会使用到JS锚点。JS锚点可以通过设置页面中元素的id属性,实现在页面内跳转到指定元素的效果。下面通过以下几个方面来详细讲解JS锚点的设置与使用方法。 设置JS锚点 1.设置元素的id属性 在HTML中,我们可以通过在指定的元素上设置id属性的值,来为该元素创建一个唯一的标识符。例如: &lt…

    JavaScript 2023年6月10日
    00
  • javascript内置对象arguments详解

    当我们在JavaScript函数中调用时,它会内置一个名为arguments的对象,包含了函数所需要的所有参数。这个对象被称为函数的“参数数组”,它实际上只是一个数组样式的对象。 arguments对象的基本用法 因为arguments是一个对象,你可以使用点操作符来访问它的属性。下面是一些常用的arguments属性: arguments.length 此…

    JavaScript 2023年6月10日
    00
  • 微信小程序 input输入框控件详解及实例(多种示例)

    下面就为你详细讲解“微信小程序 input输入框控件详解及实例(多种示例)”的完整攻略。 一、概述 在微信小程序中,我们常常用到前端开发的基础控件之一 input,该控件主要用于获取用户输入的数据。 二、类型 微信小程序 input 控件主要有以下几个属性类型: 1. text text 输入框类型是最基础也是最常用的一种,可以输入任意字符,长度没有限制。 …

    JavaScript 2023年6月10日
    00
  • 一文读懂微信小程序页面导航

    一文读懂微信小程序页面导航 微信小程序是一种轻量化的应用程序,用户可以很方便地在微信中打开使用,而小程序页面导航则是小程序中很常用的功能。本文将详细讲解微信小程序页面导航的完整攻略,包括如何使用导航组件、如何自定义导航栏以及如何使用API进行页面跳转等。 使用导航组件 在小程序中使用导航组件可以实现常见的页面导航功能,比如顶部导航栏和底部TabBar。微信小…

    JavaScript 2023年6月11日
    00
  • 与iframe进行跨域交互的解决方案(推荐)

    与iframe进行跨域交互是前端开发中常见的场景,但是由于同源策略的限制,直接使用JavaScript操作跨域iframe是不被允许的。那么,如何解决这一问题呢? 以下是利用postMessage进行与iframe跨域交互的解决方案(推荐): 步骤一:在iframe的源码中添加监听器 <html> <head> <script&…

    JavaScript 2023年6月11日
    00
  • JavaScript数学对象Math操作数字的方法

    我可以给你详细讲解JavaScript数学对象Math操作数字的方法的攻略。 1. Math的基本信息 在JavaScript中,我们可以使用Math对象来进行数学计算。而Math对象是一个不必实例化就可以使用的对象,即它是一个全局对象。Math对象提供了很多用于数学计算的方法,例如三角函数、指数、对数、乘方、四舍五入、取整等等。在数学的各种操作中,Math…

    JavaScript 2023年5月27日
    00
  • JS设置随机出现2个数字的实例代码

    下面是详细讲解“JS设置随机出现2个数字的实例代码”的完整攻略。 1. 需求分析 在编写代码前,我们需要先明确需求,即需要实现随机出现2个数字。 2. 代码实现 // 生成随机数 function generateRandomNumber(maxNum) { return Math.floor(Math.random() * maxNum); } // 生成…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部