递归函数
- 递归:函数内部,直接或者间接调用函数自己,递归一定要有出口,不然就是死递归
------------- 注意:return 除了返回一个结果,终止函数的执行
break: 用于终止循环
function fn(n) {
var jc = 1;
if (n > 1) {
jc = n * fn(n - 1)
}
// 递归的出口
if (n == 1) {
jc = 1;
}
return jc;
}
console.log(fn(5));
对象
万事万物皆对象:对象是一组无序的相关属性和方法的集合
对象由属性和方法组成
属性:静态的描述信息: 身高,体重,年龄…
方法:动态的行为: 吃饭, 学习,睡觉…
var obj={}
//对象属性
obj.name="张三"
obj.age=18
obj.weight=200
//对象的方法:
obj.eat=function(){
函数内容【让其做的事情】
}
对象的属性由键值对组成,又可表达成:
var obj={
name="张三",
age=18,
weight=200
}
// for in循环遍历对象
// obj代表的是整个对象
for(var k in obj){
// console.log(k); // 键
// console.log(obj[k]); //值
console.log(k, obj[k]);
}
数组的概念
一组数据的有序的集合(可以存储任意数据类型的值)
一组数据的长度,可以通过length来获取
注意:数组的元素编号是从0开始,最后一个元素是:length-1
//定义一个数组
var arr=[1,2,6,4,5]
//获取该数组的长度为:
console.log(arr.length)
// 获取最后一位元素为:
console.log(arr[arr.length-1])
数组定义的2种方式
// 1、字面量法
var arr=[1,2,3,4,5,6]
console.log(arr)
// 2、构造函数的方式
var arr = new Array(1,5,6,7,8,9)
console.log(arr)
// 2.1 需要注意
var arr=new Array(5);//这里表示的是存储5个空元素
console.log(arr)
数组的赋值
// 长度赋值
var arr = [1,5,6,7,9]
arr.length=10
//数组赋值
var arr =new Array()
for (var i=0;i<30;i++){
arr[i]=(i+1)
}
console.log(arr)
数组api–增删元素/排序/转字符串
// Array: 对象 js内置对象:提供了很多很多的方法供我们使用
// Array对象:属性和方法
// 属性: length
console.log('--------------------------------------------------------------------------------');
// 方法:push() 尾部追加 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
// arr.push(参数1,参数2)
// var arr = [1,2,3];
// arr.push(4); // 追加元素
// console.log(arr); //追加完毕的结果
console.log('--------------------------------------------------------------------------------');
// pop() 尾部删除 方法从数组中删除最后一个元素,并返回该元素的值
// var arr = [1,2,3,4,5];
// //console.log(arr.pop()); //打印的是返回的元素
// arr.pop();
// arr.pop();
// console.log(arr);
console.log('--------------------------------------------------------------------------------');
// shift() 头部删除 方法从数组中删除第一个元素,并返回该元素的值
// var arr = [1, 2, 3, 4, 5];
// // console.log(arr.shift()); //返回的是删除的元素
// arr.shift();
// arr.shift();
// console.log(arr);
console.log('--------------------------------------------------------------------------------');
// unshift() 头部添加 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。
// var arr = [1, 2, 3, 4];
// arr.push(5);
// arr.unshift(0);
// console.log(arr);
console.log('--------------------------------------------------------------------------------');
// sort() 排序(数字) 可以从小到大进行排列 可以从大到小进行排列
// 语法: arr.sort(function(a,b){return a-b;})
// var arr = [12, 3, 52, 6, 78, 9];
// arr.sort(function (a, b) {
// return a - b;
// })
console.log('--------------------------------------------------------------------------------');
// reverse() : 反转 数组中的元素
var arr = [12,32,34,21,4];
// arr.reverse();
// console.log(arr);
console.log('--------------------------------------------------------------------------------');
// join('-') 将数组元素以 - 的形式拼接成字符串,返回的是拼接好的字符串
var arr =['张三','李四','王五','张三','李四'];
console.log(arr.join('--'));
console.log(typeof arr.join('--'));//string
console.log('--------------------------------------------------------------------------------');
// indexOf() 返回元素首次出现的下标(索引)位置,找不到了返回的是-1
console.log(arr.indexOf('张三'));
console.log(arr.indexOf('哈哈'));//-1
console.log('--------------------------------------------------------------------------------');
// lastIndexOf() 从后往前进行查找
console.log(arr.lastIndexOf('张三'));
console.log('--------------------------------------------------------------------------------');
// typeof 检测基本数据类型
console.log(typeof arr); // object
console.log(typeof null); //object
console.log('--------------------------------------------------------------------------------');
// instanceof 检测是什么类型(复杂数据类型)
console.log(arr instanceof Array); // 检测是否为数组类型,返回true代表是数组,返回false不是数组
案例-利用api,解决实际问题
- 利用indexof和push()解决数组的去重问题
// indexOf() :返回数组中首次出现元素的下标位置,找不到的返回-1
// 需求:将数组中重复的元素去掉,留下不重复的元素
var arr = [1, 2, 1, 3, 2];
var newarr = []
// 原理:在新数组中查找 遍历过来的元素,找不到的就放到新数组中
// 找不到和找到怎么表示呢?
// for (var i = 0; i < arr.length; i++) {
// // newarr.indexOf(arr[i])==-1代表在新数组中没有找到该(arr[i])元素,就存入新数组中
// if (newarr.indexOf(arr[i]) == -1) {
// newarr.push(arr[i])
// }
// }
// console.log(newarr);
for (var i = 0; i < arr.length; i++) {
var flag = true; // 假设我的新数组中 没有任何一个元素,遍历过来的一律存入
// 该循环就是一个过滤器,用于判断新数组中是否含有过来的元素,有的话就将状态改为false
if (newarr.indexOf(arr[i]) != -1) {
flag = false;
}
// 如果状态改为false之后,就不放入数组中了
if (flag) {
newarr.push(arr[i]);
}
}
console.log(newarr);