知识点回顾:
函数:
形参和实参,不对等的
短路赋值
字符串拼接(返回很多个值的时候,使用字符串拼接)
作用域 !!!!!!
全局,局部,作用域是相对的(子函数可以访问到父函数的变量)
形参:本质就是一个局部变量
预编译
提升var和具名函数
// 代码并不永远是从上而下执行的
console.log(111);
// 事件处理函数是后面才执行的,也就是点击的时候才会执行
document.onclick = function () {
console.log(666);
}
console.log(222);
//实际顺序
// 111
// 222
// 666
//点击事件需要点击之后才执行
函数:一种数据类型
系统函数 prompt() confirm() eval()
递归:传递与回归,自己调用自己
欧几里得求最大公约数实例:
// 欧几里得求最大公约数
// 8 12
// 8 / 12 8
// 12 / 8 4
// 8 / 4 0
// 4 / 0
// 3 7
// 3 / 7 3
// 7 / 3 1
// 3 / 1 0
// 1 / 0
// a % b === 0 b就是最大公约数
function gcd(a , b) {
// if(a % b === 0) {
// return b
// }
// return gcd(b , a % b)
return a % b === 0 ? b : gcd(b , a % b)
}
// b为0的时候,a就是他们的最大公约数
// function gcd(a,b){
// return b===0?a:gcd(b,a%b);
// }
var res = gcd(28,18)
console.log(res);
arguements接受实参问题
arguements作为伪数组可以接受实参,也有对应的arguements.length和下角标,可以在实参不能确定的时候使用
// 一般情况下,使用形参来接受实参的值
// 话可以使用arguments来接受实参
function log() {
// 伪数组 / 类数组
console.log(arguments);
console.log(arguments[0]);
console.log(arguments[1]);
// console.log(arguments[2]);
console.log(arguments.length);
}
log(1,2)
数组
(储存一组相同数据类型的数据)
数组就是一组数(一般来说,数据类型一样),相当于一次性定义了很多相同数据类型的变量,如果说单个变量是一个小容器,数组就是有多个格档的大容器(每个格档是个小容器)。
数组是一种数据类型。
// var a = 1 ;
// var b = 3 ;
// var c = 5 ;
// var d = 2 ;
// 数组:存储一组相同数据类型的数据
var arr = [1,3,5,,2] ;
console.log(arr);
// 数组下标 访问数组的值的方法:arr[index]
console.log(arr[0]);
// 数组的长度
console.log(arr.length);
console.log(arr[3]);
// var arr = ['a' , 'b' , 'c'] ;
// var arr = [1,2,'a','b',true] ; // 不太规范
var arr = [1,2,3] ;
console.log(arr[10]); // undefined
// [1,2,3,,,,,,,20]
// 实际上变相的加长了数组的长度
arr[10] = 20 ;
console.log(arr[10]);
console.log(arr.length); // 11
console.log(arr);
// var arr = [1,2,3] // 字面量声明
// // 数组是一个对象
// var arr = new Array(1,2,3) ; // 实例化一个对象 Array构造函数(用于创建对象的)
// console.log(arr.length);
// console.log(arr);
// var a = 1 ; // 字面量声明
// var b = new Number(2) ; // 实例化一个对象
// console.log(a);
// console.log(b);
// var c = 'hello' ;
// var d = new String('hello') ;
// // 当Array只有一个参数的时候,表示数组的长度
// var arr2 = new Array(10) ;
// console.log(arr2);
// 声明一个空数组,向数组中追加值
var arr = [] ;
arr[0] = 'a' ;
arr[1] = 'b' ;
arr[2] = 'c' ;
arr[10] = 'f' ;
遍历
读取数组中的每一个值
循环和 for in 用于遍历对象的角标
for in会自动滤过空值,一般不建议使用。
for of 遍历对象的值
// 遍历:读取数组中的每一个值
var arr = [1,2,3,4,,,,5] ;
// console.log(arr[0]);
// console.log(arr[1]);
// console.log(arr[2]);
// 循环遍历
// for(var i = 0 ; i < arr.length ; i++) {
// console.log(arr[i]);
// }
// for in 用于遍历对象的角标 -- bug(自动过滤掉空值)
// for(var i in arr) {
// console.log(arr[i]);
// }
// for of 遍历对象 的值
for(var v of arr) {
console.log(v);
}
案例:产生一个四位数的随机验证码
function rand(min , max){
return Math.floor(Math.random()*(max - min)+min)
}
var arr = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','1','2','3','4','5','6','A','B','C','D','E','F'];
var res = '';
for(i = 0 ; i < 4 ; i++){
res += arr[rand(0 , arr.length)]
}
console.log(res)
案例:找到数组中的最大值
var arr = [10, 3 , 4 , 8 , 56 , 9 , 18];
var max = arr[0];
for(i= 0 ; i < arr.length; i++){
if(max < arr[i]){
max = arr[i]
}
}
console.log(max);
案例:冒泡排序
把一组数一一挪位,最终获得一组从小到大的数组
循环两次,内层循环一一对比后排序,但因为每个数排到最后之后下一个数需要对比的值就会少一个,因此内层循环可以优化为比循环数组长度少一之后减去一个循环次数i。
var arr = [12 , 4 , 6 , 45 , 9 , 8]
for(var i = 0 ; i < arr.length - 1 ; i++){
for(var j = 0 ; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
var t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t
}
}
}
console.log(arr);
案例:选择排序
依次对比每一个数值的大小,默认第一个为最小,如果不是,最小值将改变,并且将当下角标的数值和最小值进行对换。 ——通过提前对比大小减少数值的对调次数
var arr = [12 , 4 , 8 , 9 , 34 , 5];
for(var i = 0 ; i < arr.length - 1 ; i++){
var min = i;
for(var j = i+1 ; j < arr.length ; j++){
if(arr[min] > arr[j]){
min = j
}
}
if(min !== i){
var t = arr[i];
arr[i] = arr[min];
arr[min] = t;
}
}
console.log(arr);
数组的基本方法
push 向尾部追加值
pop 在数组的尾部删除一个值
unshift 在数组的头部追加值
shift 向数组的头部删除一个值
// push(v1,v2,v3...) 向数组尾部追加值
// pop() 在数组尾部删除一个值
// unshift() 向数组的头部追加值
// shift() 向数组的头部删除一个值
var arr = [1,2,3] ;
// arr[3] = 'a' ;
arr.push('a' , 'b' , 'c') ;
console.log(arr);
arr.pop() ;
console.log(arr);
arr.unshift('hello' , 'hi');
console.log(arr);
arr.shift();
console.log(arr);
var arr2 = [] ;
for(var i = 0 ; i <= 10 ; i++) {
// arr2[i] = i
arr2.push(i)
}
console.log(arr2);
push封装
/ 向一个数组中追加数据
// var arr = [1,2,3,4] ;
// arr[arr.length] = 'hello' ;
// console.log(arr);
// function push(n , n2 , n3) {
// var arr = [1,2,3,4] ;
// arr[arr.length] = n ;
// arr[arr.length] = n2 ;
// arr[arr.length] = n3 ;
// console.log(arr);
// }
function push() {
var arr = [1,2,3,4] ;
// 用于接受实参列表 --- 伪数组
console.log(arguments);
for(var i = 0 ; i < arguments.length ; i++) {
console.log(arguments[i]);
arr[arr.length] = arguments[i]
}
console.log(arr);
}
push('a','b','h' ,'t')
pop封装
// 删除数组中的最后一个值
function pop() {
var arr = [1,2,3,4,5] ;
var arr2 = [] ;
for(var i = 0 ; i < arr.length - 1 ; i++) {
arr2.push(arr[i])
}
console.log(arr2);
}
pop()