11 函数
函数的作用:完成一个功能的代码块。
11.1 函数的定义
function 函数名() {
功能代码块;
}
11.2 函数的调用
// 语法
函数名();
11.3 函数的返回值
如果函数有返回值,需要通过return返回,如果没有返回值就不写。
11.4 函数的参数
// 形参是在定义函数时
function 函数名(形参1,形参2,形参3.......){
代码块
}
// 实参是在调用的时候针对有参函数传递的具体的值
函数名(实参1,实参2.....);
11.5 函数声明
- 利用函数关键字 function 自定义函数(命名函数)
function fn() {
console.log("Hi~")
}
fn();
- 函数表达式(匿名函数)
var 变量名 = function() {}
var fun = function(aru) {
console.log('我是函数表达式');
console.log(aru);
}
fun('pink老师');
11.6 递归函数
- 就是自己调用自己
- 将一个大的问题转换为比原问题小的同一问题
- 递归函数要知道递归终止的条件、递归操作
12 对象
12.1 对象的定义
对象就是键值对和集合。
键值对:key: value
12.2 对象的创建
12.2.1 利用对象字面量创建对象
var obj = {
uname: '张三疯',
age: 18,
sex: '男',
sayHi: function() {
console.log('hi~');
}
}
12.2.2 利用new Object 创建对象
var obj = new Object(); // 创建了一个空的对象
obj.uname = '张三';
obj.age = 11;
obj.sex = '女';
obj.sayHi = function() {
console.log('你好');
}
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi(); // 调用这个匿名函数
12.2.3 利用构造函数创建对象
// 语法格式:
function 构造函数名() {
this.属性 = 值;
this.方法 = function(){
}
}
12.3 对象的操作
对对象中的元素进行增、删、改、查等操作。
var obj = {
name: "张三",
age: 14,
}
console.log(obj);
// 1. 获取对象中键值对的对数
console.log(Object.keys(obj).length);
// 2. 向对象中插入新的键值对: 1> 利用 . 的形式 2> 利用 [] 的形式
obj.gender = "女";
obj["tel"] = "13892290267";
console.log(obj);
// 3. 修改对象中键值对属性及值,如果里面原本就有属性则修改,如果没有则是添加
obj.gender = '男';
console.log(obj);
obj['e-mail'] = "[email protected]";
console.log(obj);
// 4. 删除对象中的属性
delete obj.tel;
console.log(obj);
// 5. 遍历对象:采用 for...in 的方法,遍历出的是对象的值
for (var k in obj) {
console.log(k); // 遍历的是对象中的键
console.log(obj[k]); // 遍历的是对象中的值
}
13 数组
13.1 数组的定义
数组:存放一组有序数据的集合,是一种特殊的变量。
13.2 数组的创建
13.2.1 利用数组字面量创建数组
var arr = [1, 2, 3];
13.2.2 利用new Array()创建数组
var arr2 = new Array(); // 创建了一个空的数组
var arr3 = new Array(2); // 这个2 表示数组的长度为2,里面有两个空的数组元素
var arr4 = new Array(2, 3); // 等价于[2,3],表示里面有两个数组元素是2和3
console.log(arr4);
13.3 数组的操作
13.3.1 获取数组的长度
语法:数组名.length
13.3.2 增加数组元素
arr2[0] = 5;
arr2[1] = 10;
arr2[15] = 30;
console.log(arr2);
console.log("arr2的数组长度是:" + arr2.length); // arr2的数组长度是:16
// 稀疏数组:在定义数组中,数组中有一些元素没有内容(undefined),但是其长度是最后一个索引号+1。
13.3.3 修改数组元素
arr1[1] = "banana";
console.log(arr1); // ['apple', 'banana', 'orange', 'watermelon']
13.3.4 删除数组元素
delete arr2[1];
console.log("arr2删除后的数组长度是:" + arr2.length); // arr2删除后的数组长度是:16
// 虽然删除了数组的元素,但是数组的长度还是不变。
13.4 遍历数组
-
for … in … 遍历
-
for 循环遍历
13.5 遍历对象数组
// 数组中包含对象
var arr3 = [{
name: "中国"
}, {
name: "英国",
}, {
name: "美国"
}]
for (var i = 0; i < arr3.length; i++) {
console.log(arr3[i].name);
}
// 对象中包含数组
var arr4 = {
fruits: ["apple", "pear", "orange", "watermelon"],
toies: ["train", "gun", "plane"]
}
for (var k in arr4) {
console.log(arr4[k]);
// (4) ['apple', 'pear', 'orange', 'watermelon']
// (3) ['train', 'gun', 'plane']
var value = arr4[k];
console.log(value.length); // 4 3
for (var i = 0; i < value.length; i++) {
console.log(value[i]);
}
}
13.6 数组中常用的方法
1) concat(): 创建一个新数组并返回,不会改变原数组
2)join(): 把每个数组元素转换成一个字符串,然后把这些字符串连接起来
3)pop(): 删除数组中的最后一个元素,把数组长度减1,并且返回它删除的元素的值。如果数组已经为空,则pop()不改变数组,返回undefined。
4)push(): 在数组尾部添加一个新的元素,它直接修改array,而不是创建——个新的数组。
5)shift(): 删除数组中的第一个元素,返回那个元素的值,并且将余下的所有元素前移一位,以填补数组头部的空缺。如果数组是空的,将不进行任何操作,返回undefined。注意,该方法不创建新数组,而是直接修改原有的数组。
6)unshift(): 在数组头部添加一个新的元素,并将已经存在的元素顺次地移到较高的下标处。注意,该方法不创建新数组,而是直接修改原有的数组。
7)reserve(): 颠倒数组中的顺序
8)slice(): 将返回数组的一部分,或者说是一个子数组。返回的数组包含从start 开始到end之间的所有元素,但是不包括end所指的元素。即前闭后开。如果没有指定end,返回的数组包含从start开始到原数组结尾的所有元素。负值表示倒数的意思。-1表示倒数第一个;-2表示倒数第二个。
console.log(arr6.slice(1, 3)); // ['watermelon', 'banana']
console.log(arr6.slice(1, -1)); // ['watermelon', 'banana', 'strawberry']
console.log(arr6.slice(-3)); // ['banana', 'strawberry', 'peach']
9)sort(): 对数组中的元素进行排序,按照数字编码的顺序。如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
console.log(arr6.sort()); // ['banana', 'peach', 'pitaya', 'strawberry', 'watermelon']
var arr10 = [12, 7, 34, 2, 45];
console.log(arr10.sort()); // [12, 2, 34, 45, 7]
arr10.sort(function(a, b) {
// 这里的是匿名函数,因为匿名函数只需要调用一次,不需要二次调用,所以我们不提供命名,可以直接使用匿名函数进行调用。
return a - b;
})
console.log(arr10); // [2, 7, 12, 34, 45]
arr10.sort(function(a, b) {
return b - a;
})
console.log(arr10); // [45, 34, 12, 7, 2]
10)splice(): 添加、删除、替换数组中的元素。一共有三个属性, start:开始插入、删除、替换的元素的索引;deleteCount:需要删除的元素个数;value:要插入的元素,从start索引处开始。
var arr11 = ["piano", "erhu", "guzheng"];
// 向数组中索引为1的位置添加两个元素"suona","guitar"
arr11.splice(1, 0, "suona", "guitar"); // ['piano', 'suona', 'guitar', 'erhu', 'guzheng']
// 删除从索引为2开始的两个元素
arr11.splice(2, 2); // ['piano', 'suona', 'guzheng']
// 替换索引为1元素为"drumset"
arr11.splice(1, 1, "drumset") // ['piano', 'drumset', 'guzheng']
console.log(arr11);
11)toString(): 把数组转换成字符串,并且返回这个字符串。
传值调用和传引用调用
// 传引用调用:向函数中传递的是对象(引用数据类型),形参的改变会影响实参
function swap(arr, i, j) {
//arr=[1,2,3,4];i=0;j=2
console.log(arr[i], arr[j]); // 1 3
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
// 交换的只是num1,num2
console.log(arr[i], arr[j]); // 3 1
}
var nums = [1, 2, 3, 4];
swap(nums, 0, 2)
console.log(nums[0], nums[2]); // 1 3
// 传值调用:向函数中传递具体的值(基本数据类型),形参的改变不会影响实参
function swap(num1, num2) {
console.log(num1, num2); // 10 20
var temp = num1;
num1 = num2;
num2 = temp;
// 交换的只是num1,num2
console.log(num1, num2); // 20 10
}
var a = 10;
var b = 20;
swap(a, b);
console.log(a, b); // 10 20
14 数字常用的方法
-
Number.MAX_VALUE
:最大数值 -
Number.MIN_VALUE
:最小数值 -
isNaN()
:检验是否是非数字型 -
toFixed()
:对数字进行格式化,小数点后进行四舍五入 -
toString()
:将数字型转换为字符串型 -
valueOf()
:返回一个数值的原始数值
15 日期常用的方法
// 创建日期对象,使用构造函数
var newTime = new Date();
console.log(newTime); // Wed Dec 28 2022 14:18:43 GMT+0800 (中国标准时间)
-
获取年份:
getFullYear()
-
获取月份,月份是从0-11记录1-12月份的,通常要加一:
getMonth()
-
获取一月中的某一天:
getDate()
-
获取时:
getHours()
-
获取分:
getMinutes()
-
获取秒:
getSeconds()
-
获取星期几:
getDay()
-
获取毫秒:
getMilliseconds()
-
时间戳:
getTime()
时间戳:时间点与格林威治时间相差的毫秒数。
// 获取两个时间的时间差
var oldTime = new Date(2022, 11, 10, 15, 34, 56);
var subSecondes = (time1 - oldTime) / (24 * 60 * 60 * 1000);
console.log(subSecondes);
16 数学中常用的方法
-
abs()
:计算绝对值 -
floor()
:对数值向下取整,即小于这个数的最大整数。 -
ceil()
:对数值向上取整,即大于这个数的最小整数 -
max()/min()
:返回多个值中的最大/最小数 -
pow(x, y)
:计算x的y次幂,x为底数,y为幂数 -
random()
:返回一个0-1的随机数 -
round()
:四舍五入为最接近的整数。对于0.5将它上舍入 -
sqrt(x)
:计算x的平方根
注意:sqrt()计算数字的平方根,用pow()可以计算一个数的任意次根。
17 字符串常用的方法
-
trim()
:去除首尾空格 -
charAt()
:返回字符串的第n个字符 -
concat()
:连接字符串 -
length
:字符串的长度 -
slice()
:从字符串中抽取一个子串,里面有两个属性,start起始位置,end结束位置,但是不包括end,负数表示从倒数开始 -
substring(from ,to)
:截取一个子串 -
字符串大小写的转换:
toUpperCase()
转大写,toLowerCase()
转小写 -
indexOf()
:检索字符串第一次出现的位置 -
lastIndexOf()
:检索字符串最后一次出现的位置
注意:如果 indexOf 和 lastIndexOf 查找的子串不存在则返回 -1
-
concat()
:拼接字符串,也可以使用 + 进行替换 -
split()
:分割字符串,可以匹配正则表达式 -
replaceAll()
:替换字符串,可以匹配正则表达式,替换一个与正则匹配的子串 -
match(reg)
:从字符串中找到与正则匹配的内容,存入数组中,匹配的结果与正则的修饰符g有关。如果有g,进行全局匹配,否则只匹配一次
var fruits = "apple pear watermelon orange peach banana";
// 找到所有包含字母p的水果
var result = fruits.match(/[a-z]*p[a-z]{3,}/);
console.log(result); // ["apple","pear", "peach"]
search(regexp)
:检索第一个与regexp相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1。
var fruits = "apple pear watermelon orange peach banana";
var index = fruits.search(/\d+/);
console.log(index); // -1