.JavaScript数组
JavaScript的对象
内建对象
宿主对象
自定义对象
数组(Array)
数组也是对象(内建对象)
它和我们普通对象功能类似,也是用来存储一些值的
不同的是普通对象使用字符串作为属性名
而数组是使用数字来作为索引操作元素
索引:
从0开始的整数就是索引
数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据
向数组中添加元素
语法:数组[索引] = 值
arr[0]=12;
arr[1]=34;
arr[2]=56;
arr[4]=67;
console.log(arr);
读取数组中的元素
语法:数组[索引]
如果读取不存在的索引,不会报错而是返回undefined
获取数组的长度,可以使用length这个属性获取
语法:数组.length
对于连续的数组,使用length可以获取到数组的长度(元素的个数)
对于非连续的数组,使用length汇获取到数组的最大的(索引+1)
尽量不要创建非连续数组
修改length
如果修改的length大于原长度,则多出部分会空出来
如果修改的length小于原长度,则多出的部分会被删除
JavaScript数组字面量
创建一个数组
var arr=new Array();
使用字面量来创建数组
var arr1=[];
语法:[]
console.log(arr1);
使用字面量创建数组时,可以在创建时就指定数组中的元素
var arr2=[12,34,56,7,8,9,0,3,5];
console.log(arr2[2]);//56
console.log(arr2);
使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数 的参数传递,元素之间使用 ,隔开
var arr3=new Array(12,34,56,7,8,9,0,3,5);
console.log(arr3);
创建数组arr4,这个数组中只有一个元素10
var arr4=[10];
console.log(arr4);
创建一个长度为10的数组
var arr5=new Array(10);
console.log(arr5);
数组的值可以是任意的数据类型,包含对象的
var arr6=["hello",123,false,undefined,null];
console.log(arr6);
数组中可以存放函数
var arr7=[function(){alert(123);},function(){alert("helloworld");}];
console.log(arr7[0]);
arr7[0]();
二维数组
var arr8=[
[1,3,4,5],
[1,4,6,7]
];
console.log(arr8[1][2]);
JavaScript数组的方法
连接两个或更多的数组,并返回结果。
把数组的所有元素串联成一个字符串。元素通过指定的分隔符进行分隔
push()
该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数 组的末尾
该方法会将数组新的长度作为返回值返回
pop()
该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
unshift()
向数组开头添加一个或多个元素,并返回新的数组长度
向前边插入元素以后,其他元素的索引会依次调整
shift()
可以删除数组的第一个元素,并将被删除的元素作为返回值返回
JavaScript数组的遍历
所谓的遍历数组,就是将数组中所有的元素都取出来
JavaScript数组的遍历foreach(拓展)
一般我们都是使用for循环去遍历数组,
JS中还为我们提供了一个方法,用来遍历数组
forEach()
这个方法只支持IE8以上的浏览器
IE8及以下的浏览器均不支持该方法,所以如果需要兼容IE8,则不 要使用forEach
如果考虑到兼容问题还是使用for循环
forEach()方法需要一个函数作为参数
像这种函数,由我们创建但是不由我们调用的,我们称为回调函数
数组中有几个元素函数就会执行几次,每次执行时,浏览器将会遍历到的元 素以实参的形式传递进来,我们可以来定义形参读取这些内容
浏览器会在回调函数中传递三个参数:
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组
JavaScript函数的方法apply与call
call()与apply()
这两个方法都是函数对象的方法,需要通过函数对象来调用
当对函数调用call()和apply()都会去调用函数执行
在调用call()与apply()可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this
call()方法可以将实参在对象之后依次传递
apply() 方法需要将实参封装到一个数组中统一传递
this的总结:
1.以函数的形式调用时,this始终都是window对象
2.以方法的形式调用时,this就是调用方法的对象
3.以构造方法的形式调用时,this是新创建的那个对象
4.使用call与apply调用时,this是指定的那个对象
JavaScript_arguments
在调用函数时,浏览器每次都会传递进来两个隐含的参数:
1.函数的上下文对象 this
2.封装实参的对象arguments
arguments是一个类数组对象,它也可以通过索引来操作数组,也可以获 取长度
在调用函数时,我们所传递的实参都会在arguments中保存
arguments.length可以用来获取实参的长度
我们即使不定义形参,也可以通过arguments来使用实参,比较麻烦
arguments[0] 表示第一个实参
arguments[1] 表示第二个实参
它里面有一个属性叫做callee,
这个属性对应一个函数对象,就是当前正在执行的函数对象
JavaScript_Date对象
JavaScript 日期对象Date
Date对象(内建对象)
在JS中使用Date对象来表示一个时间
创建一个Date对象
如果时间使用构造函数创建一个Date对象,则会封装为当前代码执行的时间
创建一个指定的时间对象
需要在构造函数中传递一个表示时间的字符串作为参数
getDate() - 获取当前日期对象时几日
getDay() - 获取当前日期是星期几
- 会返回一个0~6的值
0 表示周日
1 表示周一
...
6 表示周六
getMonth() - 获取当前日期对象的月份
- 会返回一个0~11的值
0 表示 一月
1 表示二月
...
11 表示十二月
getFullYear() - 获取对象以四位数字返回年份
getTime()
- 获取当前日期对象的时间戳
- 时间戳,指的是从格林威治标准时间的1970年1月1日,0时0分0秒
到当前日期所花费的毫秒数(1秒=1000毫秒)
- 计算机底层在保存时间时使用都是时间戳
JavaScript_Math对象
Math对象和其他对象不同,它不是一个构造函数,
它属于一个工具类不用创建对象,它里面封装了数学运算相关的属性和方法
例如:
Math.PI 表示圆周率(约等于3.14159)
Math.abs(x) - 返回一个数的绝对值
Math.sin(x) - 返回一个数的正弦
Math.ceil() - 可以对一个数进行向上取整,小数位只要有值就自动进1
Math.floor() - 可以对一个数进行向下取整,小数部分会被舍掉
Math.round() - 可以对一个数进行四舍五入取整
Math.random()
可以用来生成一个0-1之间的随机数
Math.random()
可以用来生成一个0-10之间的随机数(整数)
Math.round(Math.random()*10)
可以用来生成一个0-X之间的随机数(整数)
Math.round(Math.random()*X)
可以用来生成一个1-10之间的随机数(整数)
Math.round(Math.random()*9)+1
可以用来生成一个1-X之间的随机数(整数)
Math.round(Math.random()*(X-1))+1
可以用来生成一个Y-X之间的随机数(整数)
Math.round(Math.random()*(X-Y))+Y
JavaScript包装类
数据类型:
基本数据类型:String Number Boolean Null Undefined
引用数据类型:Object
在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型转换为 对象
String()
- 可以将基本数据类型字符串转换为String对象
Number()
- 可以将基本数据类型的数字转换为Number对象
Boolean()
- 可以将基本数据类型的布尔值转换为Boolean对象
但是请注意!!!
我们在实际应用中不会使用基本数据类型的对象,
如果我们使用基本数据类型的对象,在做一些比较的时候可能会带来一 些不可预期的结果。(看bool的例子)
包装类浏览器底层自己使用的
方法和属性只能添加给对象,不能添加给基本数据类型
当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类 将其转换对象,然后在调用对象的属性和方法,调用完以后,再将其转换为基本 数据类型
将基本数据类型转换为Number对象,然后通过对象调用toString()方法
JavaScript_String对象
在底层字符串中以数组的形式保存
["h","e","l","l","o"....]
String 对象的属性length
charAt()
可以返回字符串中指定位置的字符
根据索引获取指定的字符
charCodeAt()
获取指定位置字符的字符编码(Unicode编码)
String.fromCharCode()
可以根据字符编码获取字符
indexOf()
该方法可以检索一个字符串中是否含有指定内容
如果字符串中含有该内容,则会返回第一次出现的索引
如果没有找到指定的内容,则会返回-1
可以指定第二个参数。指定开始查找的位置
lastIndexof()
该方法的用法和indexOf()一样
不同的是indexOf是从前往后找,
而lastIndexof是从后往前找
也可以指定开始查找的位置
slice()
可以从字符串中截取指定的内容
不会影响到原字符串,而是截取到内容返回
参数说明:
第一个参数:开始位置的索引(包括开始位置)
第二个参数:结束位置的索引(不包括结束位置)
如果省略第二个参数,则会截取到后边所有的
也可以传递一个负数作为参数,负数的话将会从后边计算
substring()
可以用来截取只一个字符串,和slice()类似
参数说明:
第一个参数:开始位置的索引(包括开始位置)
第二个参数:结束位置的索引(不包括结束位置)
日过省略第二个参数,则会截取到后边所有的
不同的是这个方法不能接收负值,如果传递负值,则默认为0
如果第二个参数小于第一个参数,则自动调换位置
split() 很重要的方法
可以将一个字符串拆分称为一个数组
参数:
需要一个字符串作为参数,将会根据该字符串去拆分数组
toUpperCase()
将一个字符串转换为大写并返回
toLowerCase()
将一个字符串转换为小写并返回