JavaScript基础四-内置对象数组篇

262 阅读6分钟

什么是对象?

  • JavaScript中所有的事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法;
  • 对象的属性用来反映该对象某些特定的性质,如:字符串的长度、图像的长宽等;
  • 对象的方法是能够在对象上执行的动作,如:表单的“提交”(submit),时间的“获取”(getYear)等
  • JavaScript提供多个内建对象,如:String、Date、Array等等,使用对象前需要先定义 如:var arr = new Array(); var str = "Hello";

认识内置对象

  • 在JavaScript语言中有三种对象:内置对象、宿主对象、自定义对象,这里主要介绍内置对象
  • 内置对象指的是ECMAScript自带的一些对象,这些对象提供了一些常用的必要功能(即:对象属性和方法);浏览器上面跑的js内置对象有Math、String、Array、Date等。
  • 所有的JavaScript变量都是对象,数组元素是对象、函数是对象,变量都可以使用var声明,如: var arr

认识要接触的第一个内置对象数组Array

思考?

  • 我们知道变量用来存储数据,一个变量只能存储一个内容。假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据, 那就会变的更麻烦。那么该如何解决呢?这里就用到我们接下来要讲得数组,一个数组变量可以存放多个数据。好比一个班级,班级里有很多人。

什么是数组?

  • 数组是一系列值的集合,每个值都有一个索引号,从0开始;每个索引都有一个相应的值,根据需要添加更多数值。

数组的定义

  • 常规方式,new一个对象,然后向数组中添加值;数组可以指定长度,也可以不写,在js中任何时刻都可以不断向数组增加新元素 var arr = new Array(); //数组中可以添加不同的变量类型:对象元素、函数、数组、数字、字符、布尔值等
    arr[0] = "字符串"; //字符串 arr[1] = 12; //数值 arr[2] = true; //布尔值 arr[3] = myFuction; //函数
  • 常规的简写,创建数组的同时赋值 var arr = new Array("Hello",12,true);
  • 字面量定义,直接输入一个数组(即:字面量数组) var arr = ["Jack","rose",12,4.6,true];

数组的访问

  • 通过索引可以访问数组中对应位置的值,数组中的索引是从0开始的,如访问数组arr中的第一个值即为 arr[0]

数组对象属性

  • constructor 返回对象的构造函数;这里返回值是函数的引用,不是函数名:
    • JavaScript 数组 constructor 属性返回 function Array() { [native code] } //native code 本地代码,程序自带的二进制编译的,无法显示出来代码
    • JavaScript 数字 constructor 属性返回 function Number() { [native code] }
    • JavaScript 字符串 constructor 属性返回 function String() { [native code] }
  • length 返回数组的长度,即数组中元素的个数
  • prototype 向数组对象添加属性或方法 当构建一个属性,所有的数组将被设置属性,它是默认值;在构建一个方法时,所有的数组都可以使用该方法; 自定义的方法数组对象可以调用,示例如下:
    Array.prototype.toUpperCase = function(text){
            for (var i = 0; i < arr.length; i++) {
                    this[i] = this[i].toUpperCase();}}
			
    var colors = ["yellow","red","green","pink"];
    colors.toUpperCase();
    console.log(colors);

数组对象方法

  • toString() 把数组转换为字符串,并返回结果

  • join() 把数组的所有元素放入一个字符串,默认使用逗号分隔数组中的每个值,也可以通过参数(字符串类型)设置自定义的分隔符号(separator)

  • concat() 连接两个或更多的数组,并返回结果;该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本 arr1.cancat(arr2,arr3,...)

  • unshift() 向数组的开头添加一个或更多元素,并返回新的长度;新元素将添加在数组的开头;此方法改变数组的长度

  • push() 向数组的末尾添加一个或更多元素,并返回新的长度;新元素将添加在数组的末尾;此方法改变数组的长度

  • shift() 用于把数组的第一个元素从其中删除,并返回第一个元素的值;此方法改变数组的长度

  • pop() 删除数组的最后一个元素并返回删除的元素;此方法改变数组的长度

  • slice() 选取数组的一部分,并返回一个新数组;slice()方法不会改变原始数组;array.slice(start, end) //左边是闭合区间,右边是开区间

  • splice() 从数组中添加或删除元素;这种方法会改变原始数组; 语法 array.splice(index,howmany,item1,.....,itemX) 参数 index 必需。规定从何处添加/删除元素;该参数是开始插入和(或)删除的数组元素的下标,必须是数字 howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0";如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素 item1, ..., itemX 可选。要添加到数组的新元素

  • reverse() 颠倒数组中元素的顺序

  • sort() 对数组的元素进行排;默认排序顺序为按字母升序;可以将排序函数作为sort方法的参数自定义排列顺序

  • indexOf() 从数组的头部查找数组元素,找到返回数组元素的下标,否则话返回-1

  • lastIndexOf() 从数组的尾部查找数组元素,找到返回数组元素的下标,否则话返回-1 indexOf(value,index)与lastIndexOf(value,index)说明: 第一个参数为要搜索的值,第二个参数为可选参数,它指定数组中的一个索引,从指定的索引处开始搜索,若省略该参数,则从头开始搜索;若第二个参数为负数,则代表相对数组末尾的偏移量

数组的运用

  • 遍历数组

  • 数组的去重

  • 冒泡排序 思路:随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放到后面;简单来说就是交换他们的位置,如此反复的交换位置就可以达到排序的效果

  • 快速排序 思路:从数组的中间拿一个值,然后通过这个值挨个和数组里面的值进行比较,如果大于的放一边,小于的放一边,然后把这些合并,再进行比较,如此反复即可

二维数组

概念理解:

  • 一维数组,可以看成是一个盒子, 每个盒子只能放一个内容,一维数组的表示: myArr[]
  • 二维数组,可以看成是一组盒子,只不过每个盒子里面还可以放多个盒子,二维数组的表示: myArr[][]

二维数组的声明

  • 方法一:var arr = [[14,25,36],[41,25,36]]; //直接赋值
  • 方法二:先声明一维,再声明二维
var arr = new Array(); //声明一维
for(var i = 0;i < 3; i++){//一维数组长度为3
    arr[i] = new Array(); //再声明二维
    for(var j = 0; j < 4; j++){ //二维数组长度为4
              arr[i][j] = i+j; //为每个数组赋值
    }
}

练习

1、将数组中的非数值去掉,剩余的数据保存到新数组

2、将数组倒序排列,不用reverse或sort方法

3、求数组中的最大数,不允许使用sort