JS
forEach()
slice(start, end)
splice()
call()和apply()
arguments
- Date对象
Math
- 包装类
forEach()
: JS中遍历数组
- forEach()方法需要一个函数作为参数
- 像这种由我们创建但是不由我们调用的函数称为回调函数
- 数组中有几个元素函数就回执行几次,每次执行时,浏览器会将遍历到的元素 以实参的形式传递进来,我们可以来定义形参,来读取这些内容
- 浏览器会在回调函数中传递三个参数
- 第一个参数:当前正在遍历的元素
- 第二个参数:当前正在遍历的元素的索引
- 第三个参数:正在遍历的数组
var arr = ["孙悟空","猪八戒","沙和尚","唐僧","牛魔王"];
arr.forEach(function(value, index, obj) {
console.log(value);
});
slice(start, end)
- 取开始值不取结束值;
- 该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回;
var arr = ["孙悟空","猪八戒","沙和尚","唐僧","牛魔王"];
var result = arr.slice(1); //"猪八戒,沙和尚,唐僧,牛魔王"
result = arr.slice(1,-2); //"猪八戒,沙和尚"
console.log(result);
splice()
- 可以用于删除数组中的指定元素
- (起始位置,删除的数量,补充的东西…)
call()和apply()
- fun() fun.call() fun.apply() 都可以调用函数
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数用
call()
和apply()
都会调用函数执行- 在调用
call()
和apply()
可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的thiscall()
方法可以将实参在对象之后依次传递apply()
方法需要将实参封装到一个数组中统一传递
- 在调用
- this 的情况:
- 以函数形式调用时,this永远都是window
- 以方法的形式调用时,this是调用方法的对象
- 以构造函数的形式调用时,this是新创建的那个对象
- 使用call()和apply()调用时,this是指定的那个对象
function fun(){
alert(this);
}
var obj = {
};
fun.call(obj); //返回 [object Object]
fun.apply(obj); //返回 [object Object]
fun(); //返回 [object Window]
function fun2(){
console.log("a = "+a);
console.log("b = "+b);
}
var obj2 = {
name:"zhubajie",
sayName = function(){
alert(this.name);
}
};
fun.call(obj,2,3); //a = 2, b = 3
fun.apply(obj,[2,3]); //a = 2, b = 3
arguments
- 在调用函数时,浏览器每次都会传递进两个隐含的参数:
- 函数的上下文对象
this
- 封装实参的对象
arguments
- 函数的上下文对象
arguments
是一个类数组对象 不是数组 (它也可以用过索引来操作数据,也可以获取长度)- 在调用函数时,我们所传递的实参都会在arguments中保存
argument.length
可以用来获取实参的长度 (传递了几个实参)- 我们即使不定义形参,也可以通过arguments来使用实参(比较麻烦。arguments[0]表示第一个实参,arguments[1]表示第二个实参…)
- 它里边有一个属性叫做**
callee
**
这个属性对应一个函数对象,就是当前正在指向的函数的对象
function fun(){
console.log(arguments instanceof Array);//检查arguments是否是数组 返回false
console.log(Array.isArray(arguments));//检查arguments是否是数组 返回false
}
fun();
function fun2(a,b){
console.log(arguments[1]);//输出 b的值
console.log(arguments.length);//输出调用了几个实参
console.log(arguments.callee)//输出调用函数fun2(...)
}
fun2("hello", true)
Date对象 (日期、时间)
- 在JS中使用Date对象来表示一个时间
- 如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间
- 若要创建一个指定的时间对象,需要在构造函数中传递一个表示时间的字符串作为参数
日期格式: 月份/日/年 时:分:秒
getDate()
从Date对象返回一个月中的某一天(1~31)
getDay()
从Date对象返回一周中的某一天(0~6)
getMonth()
从Date对象返回月份(0~11) 0表示一月,11表示12月
getFullYear()
从Date对象以四位数字返回年份
getTime()
获取当前日期对象的时间戳
- 时间戳是指从格林威治标准时间的1970年1月1日 0时0分0秒到当前日期所花费的毫秒数(1s=1000ms)
- 计算机底层在保存时间时使用都是时间戳
var d = new Date();
var d2 = new Date("06/26/2020 11:10:30");
console.log(d2);
var date = d2.getDate();
var day = d2.getDay();
var month = d2.getmonth();
var year = d2.getFullYear();
var time = d2.getTime();
console.log("date = "+date);//输出date = 26;表示当前日期是26号
console.log("day = "+day);//输出day = 5;表示是星期五
console.log("month = "+month);//输出month = 5;表示六月份
console.log("year = "+year);//输出year = 2020;表示年份
console.log("time = "+time);//输出一段时间 (毫秒)
//利用时间戳来测试代码的执行性能
//获取当前的时间戳
var start = Date.now();
for(var i=0; i<100; i++){
console.log(i);
}
var end = Date.now();
console.log("执行了:"+(end - start)+"毫秒");
Math
- Math和其他的对象不同,它不是一个构造函数
它属于一个工具类不用创建对象,它里边封装了数学运算相关的属性和方法
Math.PI
表示的圆周率
Math.abs()
用来计算一个数的绝对值
Math.ceil()
可以对一个数进行向上取整,小数位只要有值就自动进1
Math.floor()
可以对一个数进行向下取整,小数部分会被舍掉
Math.round()
可以对一个数进行四舍五入取整
Math.random()
可以生成一个0-1之间的随机数
- 生成一个x-y之间的随机数:** Math.round(Math.random()*(y-x)+x);
**
Math.max()
可以获取多个数中的最大值
Math.min()
可以获取多个数中的最小值
Math.pow(x,y)
返回x的y次幂
Math.sqrt()
开方
console.log(Math.abs(-1));//输出 1
console.log(Math.ceil(1.1));//输出 2
console.log(Math.floor(1.99));//输出 1
console.log(Math.round(1.4));//输出 1
console.log(Math.max(10,45,30,100));//输出最大值100
console.log(Math.min(10,45,30,100));//输出最小值10
console.log(Math.pow(2,3));//输出 8
console.log(Math.sqrt(9));//输出 3
包装类
- 在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象
String()
- 可以将基本数据类型字符串转换为String
对象
Number()
- 可以将基本数据类型的数字转换为Number
对象
Boolean()
- 可以将基本数据类型的布尔值转换为Boolean
对象 - 注意:我们在实际应用中不会使用基本数据类型的对象,
如果使用基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果
基本数据类型
String Number Boolean Null Undefined
引用数据类型
Object
- 方法和属性只能添加给对象,不能添加给基本数据类型!
- 当我们对一些基本数据类型的值去调用属性和方法时,
浏览器会临时使用包装类将其转换为对象,然后再调用对象的属性和方法
调用完以后再将其转换为基本数据类型
- 当我们对一些基本数据类型的值去调用属性和方法时,
var s = 123;
s = s.toString();
s.hello = "nihao";
console.log(s.hello);//返回 underfined
console.log(s);//返回 "123"
console.log(typeof s);//返回 "string"