JavaScript基础-05-数组、Date对象、Math、包装类、字符串方法
数组(Array)
1. 数组
- 数组也是一个对象,不同点:普通对象是使用字符串作为属性名的,数组是使用数字作为索引操作元素。
- 数组的存储性能比普通对象要好,在开发中经常使用数组来存储一些数据。
- 向数组中添加元素
语法:数组[索引]=值
向读取数组中的元素,若读取不存在的索引,不会报错而是返回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( )
在调用函数时,浏览器每次都会传递两个隐含的参数:
- 函数的上下文
- 封装实参的对象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、包装类、字符串方法的更多相关文章
- javascript基础05
javascript基础05 1.变量的作用域 变量既可以是全局,也可以是局部的. 全局变量:可以在脚本中的任何位置被引用,一旦你在某个脚本里声明了全局变量,你就可以 在这个脚本的任何位置(包括函数内 ...
- JS基础语法---Date对象中常见的方法
创建实例对象 var dt = new Date(); //当前的时间---当前的服务器 console.log(dt); var dt = new Date("2017-08-12&quo ...
- Javascript数组,String对象,Math对象,Date对象,正则表达式
标题栏的滚动<html><head><title>山西众创金融</title></head>function init(){ //1.拿到标 ...
- Javascript基础学习(3)_对象和数组
一.对象是一种无序的属性集合,每个属性都有自己的名字和值. 1.创建对象 花括号内逗号分隔 var person = { "Name" : "LiCheng", ...
- JavaScript学习总结二(Date对象的用法)
javascript Date对象的常用API 1:创建日期 Date 对象用于处理日期和时间. 可以通过 new 关键词来定义 Date 对象.以下代码定义了名为 myDate 的 Date 对象: ...
- JavaScript 基础(二) - 创建 function 对象的方法, String对象, Array对象
创建 function 对象的两种方法: 方式一(推荐) function func1(){ alert(123); return 8 } var ret = func1() alert(ret) 方 ...
- #9.6课堂JS总结#变量作用域 date()对象 math()对象
一.变量的作用域 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; ...
- javascript基础编程の变量、对象、数据类型及函数
在web标准中.网页由结构.表现形式和行为三个部分组成. 结构标准---->XHTML: 表现形式标准----->CSS: 行为标准----->javascript: javascr ...
- JavaScript 基础回顾——数组
JavaScript是无类型语言,数组元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同类型.数组的元素设置可以包含其他数组,便于模拟创建多维数组. 1.创建数组 在JavaScript中, ...
- JavaScript基础——使用数组
Array对象提供存储和处理一组其他对象的一种手段.数组可以存储数值.字符串或其他JavaScript对象.创建JavaScript数组有几种不同的方法.例如,下面的语句穿件同样的驻足的3个相同的版本 ...
随机推荐
- 9.CSMA_CD协议
先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...
- 高效C++:序
C++的语法全而复杂,如何简洁高效的使用C++的各种语法,是一个值得研究的问题,特别是对于刚入门或是有小几年开发经历的同学,了解或是熟悉这个问题,所得到的提升无疑是巨大的.向前人学习,站在巨人的肩膀上 ...
- idea 导入eclipse play1.2.7项目
1.play eclipsify #myapp 转为eclipse目录结构 2.导入eclipse,一路next. 3.新增个Application -Xms1536m-Xmx2048m-Xdebug ...
- web自动化 -- 消息提示框处理 (alert、confirm、prompt)
一.前提知识 1.警告消息框(alert) 警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作. 2. ...
- Flask前后端分离项目案例
简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用postman调试. git 重构部分: token校验模块 auths认 ...
- 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》
本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...
- MySQL 删除表中所有数据
方法一:使用 delete from [表名] 生成日志 方法二:使用 truncate table [表名] 无日志生成 两种方式删除后再插入数据,第一条id的值不一样 方法一: 方法二 ...
- Android中的ANR问题
ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...
- 443端口被占用无法启动解决办法(如何查找进程ID)
摘自CSDN博客,原文地址:http://blog.csdn.net/pet8766/article/details/8186955 netstat -ano|findstr "443&qu ...
- python入门神书!|python编程从入门到实践|内附网盘链接带提取码|
点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让 ...