递归函数
-
递归:函数内部,直接或者间接调用函数自己,递归一定要有出口,不然就是死递归
------------- 注意: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));
对象
万事万物皆对象:对象是一组无序的相关属性和方法的集合
对象由属性和方法组成
属性:静态的描述信息: 身高,体重,年龄…
方法:动态的行为: 吃饭, 学习,睡觉…
对象属性
obj.name = '张三丰';
obj.age = 112;
obj.weight = 200;
obj.sex = '男'
对象的方法
obj.eat = function(){
console.log('会吃吗') }
....
console.log(obj);
对象的属性:键值对组成
var obj = {
age:112,
name:'张三丰',
sex:'男',
weight:200
}
for in循环遍历对象
obj代表的是整个对象
for(var k in obj){
console.log(k); // 键
console.log(obj[k]); //值
console.log(k, obj[k]);
}
数组的概念
数组:一组数据的有序的集合 (可以存储任意数据类型的值)
var x = 10;
var arr = [12,19,18,21,34];
打印方式太麻烦
console.log(arr[0],arr[1],arr[2],arr[3],arr[4]);
var arr1 = ['张三','李四','王五','赵六','钱七']
循环打印
0 1 2 3 4
for(var i= 0;i<5;i++){
document.write(arr1[i]+'<br>')
}
5: 代表数组的元素的个数。可以通过arr.length来获取
console.log(arr1.length);
for(var i= 0;i<arr1.length;i++){
document.write(arr1[i]+'<br>')
}
细节:1. 数组的元素是从编号为0 的元素开始的, 最后一号元素 是 arr.length-1 = 总个数-1
2. 遍历时从0 开始
for(var i= 0;i<=arr1.length-1 ;i++){
document.write(arr1[i]+'<br>')
}
console.log(arr1[arr1.length-2]);
数组定义的方式
-
字面量法
var arr = [12,34,1,43,12,3] console.log(arr);
-
构造函数的方式
var arr1 = new Array(12,34,1,43,12,3) console.log(arr1); var arr2 = new Array(5); // 不是存储了一个叫5的元素,而是 存储了 5个空的元素 console.log(arr2);
数组api之增删元素
arr:Array(数组对象)–>对象
-
pop() 删除尾部的1个元素,并返回删除的元素
-
push(参数1,…) 尾部追加1个或者多个元素,并返回新数组的长度
-
shift() 删除头部的1个元素,并返回删除的元素
-
unshift() 头部追加1个或者多个元素,并返回新数组的长度
-
sort( function(a,b){ return a-b } ) 数组元素排序
-
reverse() 数组的元素的反转
-
join(’-’) 将数组元素以 - 的形式拼接成字符串,返回的是拼接好的字符串
-
indexOf() 返回元素首次出现的下标(索引)位置,找不到了返回的是-1
-
lastIndexOf() 从后往前进行查找
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);
数组去重
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
// 找到了 重复的元素 将flag的转为false,
if (newarr.indexOf(arr[i]) != -1) {
flag = false;
}
// 如果状态改为false之后,就不放入数组中了
if (flag) {
newarr.push(arr[i]);
}
}
console.log(newarr);