数组(Array)


1. 数组

  1. 数组也是一个对象,不同点:普通对象是使用字符串作为属性名的,数组是使用数字作为索引操作元素。
  2. 数组的存储性能比普通对象要好,在开发中经常使用数组来存储一些数据。
  3. 向数组中添加元素

语法:数组[索引]=值

向读取数组中的元素,若读取不存在的索引,不会报错而是返回undefined

语法:数组[索引]

var arr=new Array();
console.log(typeof arr);  //结果为Object
// 添加元素
arr[0]=10;
arr[1]=33;
console.log(arr);
// 读取数组中的元素
console.log(arr[1]);   //结果为33

获取数组的长度,使用length属性来获取数组的长度(元素的个数)

语法:数组.length

console.log(arr.length); //结果为2

修改length:

若修改的length大于原长度,则多出部分空出来

若修改的length小于原长度,则多出部分被删除

arr.length=10;  //将长度修改为10
console.log(arr);

向最大索引加1:arr.length

arr[arr.length]=34;

2. 数组的字面量

使用字面量创建数组

语法:[ ]

var arr=[1,3,2,4,54,23];
console.log(arr1);

使用构造函数创建数组,也可以同时添加元素,将添加的元素作为构建数组的参数传递。元素之间逗号隔开

var arr1=new Array(10,20,30,40);

arr=[10];  //元素10
var arr1=new Array(10);  //10个元素的空数组;放几个数就是含该数的数组

数组中的元素可以是任意数据类型:数字,字符串,null,undefined,对象

arr=[{name:'孙悟空'},{name:'小胡'},{name:'孙'}]  //对象
console.log(arr[1].name);

arr=[function () {alert(1)},function () {alert(1)}];  //函数
arr[1]();

arr=[[1,2,3],[23,43,54]];  //数组
console.log(arr[1]);

3. 数组的四个方法

push( ):向数组的末尾添加一个或更多元素,并返回新的长度。

arr.push('小李');

pop():删除并返回数组的最后一个元素

arr.pop();

unshift( ):向数组的开头添加一个或更多元素,并返回新的长度。

arr.unshift('小三子','阿六');

shift():删除并返回数组的第一个元素

arr.shift();

Slice(开始位,结束位):从某个已有的数组返回选定的元素,不包含结束索引;该方法不会改变元素;结束位可不写,可传递一个负值,负值从后往前传递

result=arr.slice(2,4);

result=arr.slice(1,-2);

Splice(开始位,删除的数量,新元素):删除并添加数组中的指定元素,会影响到原数组,并将删除的元素作为返回值返回。

result=arr.splice(0,1,,’阿丽’); //添加新元素在第一个

Concat( ):可以连接两个或多个数组,并将新的数组返回;不会对原数组产生影响

var arr=['孙悟空','小胡','小孙'];
var arr2=['小李','三子','阿六'];
arr3=arr.concat(arr2);

join( ):该方法可以将数组转换为一个字符串,不会对原数组产生影响;指定一个字符串作为参数,字符串将成为数组中元素的连接符。默认使用,作为连接符

result=arr.join(‘-’);

reverse( ):该方法用来反转数组,会直接修改原数组

sort(a,b):对数组中元素进行排序,会影响原数组,默认按照unicode编码进行排序,对数字排序会错误。可以添加一个回调函数,并指定排序规则,需要制定两个形参:浏览器将会分别使用数组中的元素作为实参去调用回调函数。使用哪个元素调用不确定,但确定的是a在b之前。

浏览器会根据回调函数的返回值来决定元素的顺序:

  若返回>0,则元素会位置不变

  若返回<0,则元素会位置反过来

  若返回=0,则元素会位置不变

方法1:

var arr=[1,3,2,5];
arr.sort(function (a,b) {
if(a>b){
   return 1;}
else if(a<b){
   return -1;}
else{
   return 0;}})
         console.log(arr);

方法2:返回升序排列,返回a-b;返回降序排列,返回b-a

var arr=[1,3,2,5];
arr.sort(function (a,b) {

return a-b;})

4. 数组的遍历

将数组中的所有元素都取出来

for(var i=0;i<7;i++){
   console.log(arr[i]);}

创建一个函数,将数组中的Person满18岁的提取出来,然后封装到一个新的数组中并返回。

function Person(name,age) {
            this.name=name;
            this.age=age;}
         var per=new Person('小胡',12);
         var per1=new Person('小李',22);
         var per2=new Person('小花',21);
         var per3=new Person('小马',13);
         var perArr=[per,per1,per2,per3];
         function getAdult(arr) {
            var newArr=[];
// 先遍历arr,获取arr中Person对象,判断Person对象是否大于等于18;
            for(var i=0;i<arr.length;i++){
               var p=arr[i];
               if (p.age>=18) {
                  newArr.push(p);}}
               return newArr;}
         var result=getAdult(perArr);
         console.log(result);

5. forEach()用于遍历

只支持IE8以上的浏览器,需要一个函数作为参数;数组中有几个元素就会执行几次。

var arr=['孙悟空','小胡','小孙','小李','三子','阿六'];
     arr.forEach(function (value,index,obj) {//由我们创建,但不由我们调用,称为回调函数
     console.log('value='+value);});

浏览器会在回调函数中传递三个参数,第一个:当前正在遍历的元素;第二个:索引;第三个:正在遍历的数组;

6. call( )和apply( ):函数对象的方法,通过函数对象来调用???

函数调用call( )和apply( )都会调用函数执行

调用call( )和apply( )可以将一个对象指定为第一个参数,此时这个元素将会成为函数执行时的this

function fun() {
alert(this.name);}
var obj={name:’obj’};
fun.call(obj);

call()方法可以将实参在对象之后依次传递

apply()方法需要将实参封装到一个数组中统一传递

fun.call(obj,2,3);
fun.apply(obj,[2,3]);

function fun(a,b) {
   console.log('a='+a);
   console.log('b='+b);}
var obj={name:'obj',
sayName:function () {
alert(this.name);}};
// obj.sayName.apply(obj);
fun.call(obj,2,3);
fun.apply(obj,[4,3]);

7. agruments( )

在调用函数时,浏览器每次都会传递两个隐含的参数:

  1. 函数的上下文
  2. 封装实参的对象agruments,arguments是一个类数组对象,通过索引来操作数据,也可以获取长度;

在调用函数时,传递的实参都会在arguments中保存;

agruments.length:用来获取实参的数目;agruments[0]:表示第一个实参;agruments.callee:对应函数对象,就是当前正在指向的函数对象。

function fun() {
console.log(arguments.length);//结果为4

console.log(arguments[0]);}  //结果为1

console.log(arguments.callee);}  //结果为1
fun(1,2,4,3);

8. Date对象

在JS中使用Date对象来表示一个时间;

创建一个Date对象:

//如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间
         var d=new Date();
         console.log(d);
//创建一个指定的时间对象,需要在构造函数中传递一个表示时间的字符串作为参数
         //日期格式:月份/日/年份  时:分:秒
         var d2=new Date('12/12/2019 11:10:20');
         console.log(d2);

getDate( ):获取当前日期对象是几日

var date=d2.getDate();

getDay( ):获取当前日期对象是周几,会返回0-6的值

var day=d2.getDay();

getMonth( ):获取当前日期对象的月份,会返回0-11的值,11代表12

var month=d2.getMonth();

getFullYear( ):获取当前日期对象的年份

var year=d2.getFullYear();

getTime( ):获取当前日期对象的时间戳(从格林威治标准时间1970年1月1日 0时0分0秒 到现在时间的毫秒数  1秒=1000毫秒),计算机底层在保存时间时使用时间戳。

var time=d2.getTime();

获取当前时间戳:利用时间戳来执行当前代码的执行性能,在代码前后获取时间戳

var start=Date.now();

var end=Date.now();

console.log(end-start);

9. Math:与其他对象不同,不是一个构造函数,它属于一个工具类不用创建对象,里面封装了数学运算相关的属性和方法。

属性:

Math.PI   //圆周率

abs( ):用来计算一个数的绝对值

Math.abs(-1)

ceil( ):对数进行取整。

Math.ceil(1.6)

floor(x):对数进行取整。

Math.floor(1.6)

round(x):把数四舍五入为最接近的整数。

Math.round(1.2)

random():返回 0 ~ 1 之间的随机数。

生成0-x之间的随机数:Math.round(Math.random()*x )  //生成0-x之间的随机数

生成x-y之间的随机数:Math.round(Math.random()*(y-x)+x )

Math.random()

Math.round(Math.random()*10 )  //生成0-10之间的随机数

生成0-6之间的随机数

console.log(Math.round(Math.random()*5+1));

max(x,y):返回 x 和 y 中的最高值。

var max=Math.max(12,45);

pow(x,y):返回 x 的 y 次幂。

console.log(Math.pow(2,3));  //结果为8

sqrt(x):返回数的平方根。

Math.sqrt(2)

10. 包装

JS为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象

String()  Number()  Boolean()

实际应用中不会使用基本数据类型的对象,若使用基本数据类型的对象,会带来一些不可预期的结果。

var num=new Number(3);
var num2=new Number(3);
var str=new String('3');
var bool=new Boolean(true);

方法和属性只能添加给对象,不能添加给基本数据类型;当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将其转换为对象,然后再调用对象的属性和方法。调用完以后,再将其转换成基本数据类型。

var s=123;result=String.fromCharCode(72);

s=s.toString();
s.hello='你好';

console.log(s.hello);  //结果为undefined

11. 字符串的方法

var str='hello';
//在底层字符串是以字符串数组的形式保存的['h','e','l','l']
console.log(str.length);

console.log(str[0]); //索引

 

chartAt():返回在字符串中指定位置的字符。根据索引获取指定的字符

var result=str.charAt(0);

charCodeAt():返回在指定的位置的字符的 Unicode 编码。

result=str.charCodeAt(0);  //

fromCharCode():从字符Unicode编码创建一个字符串。

result=String.fromCharCode(72);  //结果:H, 数字为十进制;

result=String.fromCharCode(0x2472);  //可以直接说明为十六进制0x....

concat():连接字符串,作用和+一样;

result=str.concat("你好","再见");

indexof():该方法可以检索一个字符串是否含有指定内容

若字符串中含有该内容,则返回其第一次出现的索引,未找到就返回-1

注:可以指定第二个参数,从第几位开始查找    str.indexOf("a",2);

str='hello athguigu';
result=str.indexOf("a");
console.log(result);  //结果:6    位于第6位:从0开始

lastindexof():方法与indexof()一样,但是从后往前找;

str='hello athguigu';
result=str.lastIndexOf('a',8);
console.log(result);

slice():可以从字符串中截取指定的内容,不会影响字符串,而是将截取内容返回。

若str.slice(1):则会截取到后面所有的;str.slice(1,-1):负数则会从后面开始计算

str='hello athguigu';
result=str.slice(2,8);   //(开始索引,结束索引)包括开始不包括结束
console.log(result);  //结果:llo at

substring():可以截取一个字符串,与slice()类似。

参数:(开始索引,结束索引)包括开始不包括结束

区别:该方法不能接受负值,若出现负值,默认为0,并自动调整位置

str='hello athguigu';
result=str.substring(2,8);
console.log(result);

substr():用来截取字符串,(开始索引,截取长度)

str='hello athguigu';
result=str.substr(2,3);
console.log(result);

split():将字符串拆分为一个数组

参数:需要一个字符串作为参数,根据字符串来拆分;若传递一个空号,会将数组中的每个数都拆分。

str='hello,athg,uigu';
result=str.split(",");
console.log(typeof result);  //结果为数组

toUpperCase():将字符串变成大写;toLowerCase( ):将字符串变成小写

JavaScript基础-05-数组、Date对象、Math、包装类、字符串方法的更多相关文章

  1. javascript基础05

    javascript基础05 1.变量的作用域 变量既可以是全局,也可以是局部的. 全局变量:可以在脚本中的任何位置被引用,一旦你在某个脚本里声明了全局变量,你就可以 在这个脚本的任何位置(包括函数内 ...

  2. JS基础语法---Date对象中常见的方法

    创建实例对象 var dt = new Date(); //当前的时间---当前的服务器 console.log(dt); var dt = new Date("2017-08-12&quo ...

  3. Javascript数组,String对象,Math对象,Date对象,正则表达式

    标题栏的滚动<html><head><title>山西众创金融</title></head>function init(){ //1.拿到标 ...

  4. Javascript基础学习(3)_对象和数组

    一.对象是一种无序的属性集合,每个属性都有自己的名字和值. 1.创建对象 花括号内逗号分隔 var person = { "Name" : "LiCheng", ...

  5. JavaScript学习总结二(Date对象的用法)

    javascript Date对象的常用API 1:创建日期 Date 对象用于处理日期和时间. 可以通过 new 关键词来定义 Date 对象.以下代码定义了名为 myDate 的 Date 对象: ...

  6. JavaScript 基础(二) - 创建 function 对象的方法, String对象, Array对象

    创建 function 对象的两种方法: 方式一(推荐) function func1(){ alert(123); return 8 } var ret = func1() alert(ret) 方 ...

  7. #9.6课堂JS总结#变量作用域 date()对象 math()对象

    一.变量的作用域 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; ...

  8. javascript基础编程の变量、对象、数据类型及函数

    在web标准中.网页由结构.表现形式和行为三个部分组成. 结构标准---->XHTML: 表现形式标准----->CSS: 行为标准----->javascript: javascr ...

  9. JavaScript 基础回顾——数组

    JavaScript是无类型语言,数组元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同类型.数组的元素设置可以包含其他数组,便于模拟创建多维数组. 1.创建数组 在JavaScript中, ...

  10. JavaScript基础——使用数组

    Array对象提供存储和处理一组其他对象的一种手段.数组可以存储数值.字符串或其他JavaScript对象.创建JavaScript数组有几种不同的方法.例如,下面的语句穿件同样的驻足的3个相同的版本 ...

随机推荐

  1. 9.CSMA_CD协议

    先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...

  2. 高效C++:序

    C++的语法全而复杂,如何简洁高效的使用C++的各种语法,是一个值得研究的问题,特别是对于刚入门或是有小几年开发经历的同学,了解或是熟悉这个问题,所得到的提升无疑是巨大的.向前人学习,站在巨人的肩膀上 ...

  3. idea 导入eclipse play1.2.7项目

    1.play eclipsify #myapp 转为eclipse目录结构 2.导入eclipse,一路next. 3.新增个Application -Xms1536m-Xmx2048m-Xdebug ...

  4. web自动化 -- 消息提示框处理 (alert、confirm、prompt)

    一.前提知识 1.警告消息框(alert) 警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作. 2. ...

  5. Flask前后端分离项目案例

    简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用postman调试. git 重构部分: token校验模块 auths认 ...

  6. 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》

    本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...

  7. MySQL 删除表中所有数据

    方法一:使用 delete from [表名]    生成日志 方法二:使用 truncate table [表名]    无日志生成 两种方式删除后再插入数据,第一条id的值不一样 方法一: 方法二 ...

  8. Android中的ANR问题

    ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...

  9. 443端口被占用无法启动解决办法(如何查找进程ID)

    摘自CSDN博客,原文地址:http://blog.csdn.net/pet8766/article/details/8186955 netstat -ano|findstr "443&qu ...

  10. python入门神书!|python编程从入门到实践|内附网盘链接带提取码|

    点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让 ...