JavaScript学习笔记15

一、封装type方法

定义对象方式:

  1. 自变量
  2. 构造函数
  3. 自定义的构造函数
  4. Object.create

定义数组的方式:

  1. var arr=[];数组自变量;
  2. var arr=new Array();系统调用。两者区别就只一位数的情况

数组能用的方法来源于Array.prototype

例:
var arr = [1, , 1];

在这里插入图片描述
数组不是每一位都有值,稀疏数组



var arr = new Array();
var arr1 = new Array(1, 2, 3, 4, 5);

在这里插入图片描述



var arr = new Array(10);

长度为10的稀疏数组,括号里面只有一位数时,就代表着长度,并且里面每一位都没有值,connsole里面会是empty*10。并且里面不能写小数,会报错



var arr = [];

数组的读和写,基本上没有报错的情况,除非是引用了没有的方法

js数组是基于对象的,数组是一种特殊的对象

在这里插入图片描述

二、数组的定义

(来源于Array.prototype)
1)new Array(length/content); var arr = new Array(1,2,3,4,5 );
2)字面量 var arr = [1,2,3,4,5];

三、数组的读和写

arr [ num ] //不可以溢出读,结果 empty
arr[num] = XXX; //不可以溢出读
arr[num] = xxx; //可以溢出写

es3.0 最标准最基础 es5.0 es6.0,最新的 es7.0 还没有普及,今天讲的都是 es3.0

对象的定义方式
1 字面量.
2 构造函数,
3 自定义构造函数
4object.create

数组是一种特殊的对象,在本质上两者没有太大的区别

如传进去的参数是一个小数,就非法

在这里插入图片描述
在这里插入图片描述

四、数组常用的方法

一、改变原数组(在原来数组基础上去改变)

1)reverse、sort、push、pop、unshift、shift
2)splice

二、不改变原数组

1)forEach、filter、map、reduce、reduceRight
2)slice、concat、join、split、toString

在控制台上操作

例 push是在数组的最后一位添加数据,可以添加一个,也可以添加很多个

在这里插入图片描述

例说明push方法能重写
var arr = [];
        Array.prototype.push = function() {
            return "xixi";
        }

在这里插入图片描述

例:
数组有三位,想在数组最后一位添加东西

var arr=[1,2,3];如果在第四位加东西写成arr=[3]
//length-1位添加东西



模拟push内部方法的使用

 <script>
        var arr = [1, 2, 3];
        Array.prototype.push = function() {
            for (var i = 0; i < arguments.length; i++) {
                this[this.length] = arguments[i];
            }
            return this.length;
        }
    </script>

Array.prototype.push = function() { //不能写形参

在这里插入图片描述

例:pop是剪切方法(把最后一位数剪切出去)。在pop()括号里面不能传参,写了会忽略

var arr = [1, 2, 3];

在这里插入图片描述
在这里插入图片描述

pop是从最后一位剪切东西
push是从最后一位塞东西

例: unshift是从第一位加东西
var arr=[1,2,3];

在这里插入图片描述

例:shift是从第一位减东西
var arr=[1,2,3];

在这里插入图片描述

例:数组不能从-1位插入东西

在这里插入图片描述

可以用两个数组拼接的方式添加东西

例:reverse逆反

var arr=[1,2,3]

在这里插入图片描述

例:splice是一种剪切,切片
var arr=[1,1,2,2,3,3];
//这是从第零位到第五位
//arr.splece(从第几位开始,截取多少长度,传参在切口处添加新的数据)
arr.splice(1,2) //从第一位开始截取2位,传参可以不填
截取的是[1,2]

在这里插入图片描述
在这里插入图片描述

例:arr.splice(1,1,0,0,0)
//意思是从第一位起截取一位,然后加上0,0,0这三个数
例:var arr=[1,2,3,5]
//1是第0位,2是第一位,3是第二位,5是第三位
arr.splice(3,0,4)
变成arr=>1,2,3,4,5 

在这里插入图片描述

var arr=[1,2,3,4]
arr.splice(-1,1)
//这里的-1是倒数第一位
数组一般的方法都可以带负数

在这里插入图片描述

:下面是系统内部解决负数的问题的兼容
var arr = [1, 2, 3, 4];
        splice = function(pos) {
                pos += pos > 0 ? 0 : this.length;
            }
            // 1 + 4 = 3;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

:sort给数组排序(按照从小到大),改变原数组
var arr = [1, 3, 4, 0, -1, 9];
在sort后面加reverse就是降序

在这里插入图片描述

例:下面这个是按asc码排序的
var arr=[1,3,5,4,10];

在这里插入图片描述

所以sort给我们留了个接口,如下图
sort是按照asc码排序的
1、必须写两个形参
2、看返回值return
   1)当返回值为负数时,那么前面的数放在前面
   2)当返回值为正数时,那么后面的数在前
   3)为0,不动

 var arr = [1, 3, 5, 4, 10];
        arr.sort(function(a, b) {
            if (a > b) {
                return 1;
            } else {
                return -1;
            }
        });

return 1 此处的1代表返回正的
return -1 此处的-1代表返回负的

思维方式:上面就控制了升序
这个函数第一次调动时,就会把数组的第一位和第二位传进来,也就是a=1,b=3,然后通过规则比较,当你把返回值返回为正,为负,为0
传参的顺序(但是这个顺序是数字位置的顺序,不是按数字比),第一次是1,3,第二次是1,5,第三次是1,4,第四次是1,10,第五次是3,5,第六次是3,4,第七次是3,10,第八次是5,4,第九次是5,10,第十次是4,10;依次传参(符合冒泡排序的算法)
是以换位置的方式改变顺序

:var arr=[2,13,19,4]
//到13这一位时,换位置变成了[2,4,19,13]
//下面这种方式变成了降序
var arr = [2, 10, 20, 4, 8, 9, 10];
        arr.sort(function(a, b) {
            if (a < b) {
                return 1;
            } else {
                return -1;
            }
        });
//简化版
var arr = [2, 10, 20, 4, 8, 9, 10];
        arr.sort(function(a, b) {
            return a - b;
        });

升序是return a-b
降序是return b-a

直接调用arr.sort()比的是asc码,要在里面填函数才可以
var arr = [2, 20, 10, 20, 4, 8, 9, 10];
        arr.sort(function(a, b) {
            return b - a;
        });

在这里插入图片描述

例:给一个有序的数组,乱序排序
当我们没规律可以循环的时候,返回的是随机的
var arr = [1, 2, 3, 4, 5, 6, 7];
        arr.sort(function(a, b) {
            return Math.random() - 0.5;
        });
 //Math.random()会生成一个0到1(包括0,但是不包括1)的随即数
例:给他们三个按照年龄升序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例:按字符串长度排序

在这里插入图片描述

例:按字节长度排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例:concat连接,把后面的数组拼到前面,并成立一个新的数组,不影响之前的两个数组,不能改变原数组

在这里插入图片描述
在这里插入图片描述

例:toString是把数组当做字符串展示出来

在这里插入图片描述
在这里插入图片描述

例:slice从该位开始截取,截取到该位,并不改变原数组,这里也可以写负数

var arr=[1,2,3,4,5,6];
       //slice(从该位开始截取,截取到该位)

在这里插入图片描述

slice并不改变原数组,slice完了以后需要有东西接收,不然没有意义

在这里插入图片描述

在这里插入图片描述

slice里面可以填0个参数,也可以填1个参数,也可以填两个参数
1、如果填两个参数,slice(从该位开始截取,截取到该位

如arr.slice(1,2)从第一位开始截取,截取到第二位)

2、如果填一个参数,从第几位开始截取,一直截取到最后

如arr.slice(1)从第一位开始截取,截取到第二位)
3、不写参数就是整个截取数组(把类数组转换成数组的时候经常会使用到


例:join括号里面需要用字符串形式(标准语法规定),就会用加的东西连接起数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例:join可逆的东西:split()是String字符串方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

split按照什么拆分为数组
用什么拆,什么就没了
按-拆就去掉-
按4拆就去掉4
split可以返回数组,数组可以返回字符串

例:把下面字符串拼到一起

在这里插入图片描述

下面这种写法不好,字符串是在栈内存里面的

在这里插入图片描述

用下面这种方式更好,join里面不传参默认用逗号连接,传空串如下图

在这里插入图片描述

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值