JS学习(每日总结)

93 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

数组

问:之前学习的数据类型,只能存储一个值。如果我们想存储班级中所有学生的姓名,那么该如何存储呢?

答:可以使用数组(Array)。数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。

    // 1. 数组(Array):就是指一组数据的集合  存储在单个变量下的优雅方式。
    // 2. 利用new 创建数组
    var arr = new Array();// 创建了一个空的数组
    // 3. 利用数组字面量创建
    var arr = [];// 创建了一个空的数组
    var arr1 = [1,2,'joy','123',true];
    // 4. 我们数组里面的数据一定用逗号分隔
    // 5. 数组里面的数据 比如1,2, 我们称为数组元素

    // 6. 获取数组元素 格式 数组名[索引号]
    console.log(arr1[2]);// joy
    console.log(arr1);// 输出整个数组
    var arr2 = ['马尔扎哈','玛卡巴卡','迪丽热巴'];
    console.log(arr2[0]);
    console.log(arr2[1]);
    console.log(arr2[2]);
    console.log(arr2[3]);// 因为没有这个数组元素 所以输出的结果是 undefined

数组遍历:

    // 数组遍历 把数组从头到尾访问一遍
    var arr = ['red','green','blue'];
    for (var i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }
    //数组长度  数组名.length

    //求数组的所有元素之和及平均值
    var arr = [2,6,1,7,4];
    var sum = 0;
    var avg = 0;
    for (var i = 0; i < arr.length; i++){
        sum += arr[i];
    }
    avg = sum / arr.length;
    console.log(sum,avg);// 想要输出多个变量 用逗号分隔即可

    // 求数组[2,6,1,77,52,25,7]中的最大值
    // 声明一个保存最大元素的变量 max。
    // 默认最大值可以取数组中的第一个元素。
    // 遍历这个数组,把里面每个数组元素和 max 相比较。
    // 如果这个数组元素大于max 就把这个数组元素存到 max 里面,否则继续下一轮比较。
    // 最后输出这个 max。
    var arr = [2,6,1,77,52,25,7];
    var maximum = arr[0];
    for (var i =1; i < arr.length; i++) {
        if (maximum < arr[i]) {
            maximum = arr[i];
        }
    }
    console.log('该数组里的最大值是:' + maximum);

    // 将数组['red','green','black','pink'] 转换为字符串,并且用 | 或其他符号分隔
    var arr = ['red','green','black','pink'];
    var str = '';
    var sep = '|';
    for (var i =0; i < arr.length; i++) {
        str += arr[i] + sep;
    }
    console.log(str);

新增数组元素:

    // 1. 新增数组元素 修改length长度
    var arr = ['red','green','blue'];
    console.log(arr.length);
    arr.length = 5;// 我们把数组元素改为了5 里面应该有5个元素
    console.log(arr);
    console.log(arr[3]);// undefined

    // 2. 新增数组元素 修改索引号 追加数组元素
    var arr1 = ['red','green','blue'];
    arr1[3] = 'joy';
    console.log(arr1);
    arr1[0] = 'yellow';// 这里是替换原来的数组元素
    console.log(arr1);
    arr1 = '有点意思';
    console.log(arr1);// 不要直接给 数组名赋值 否则里面的数组元素都没有了

    var arr = [2,0,6,1,77,0,52,0,25,7,89];
    var newArr = [];
    //刚开始newArr.length 就是0
    // var j = 0;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] > 10) {
            // 新数组应该从0开始 依次递增
            newArr[newArr.length] = arr[i];
            // j++; 
        }
    }
    console.log(newArr);

    //数组翻转
    var arr = ['red','green','pink','purple'];
    var newArr = [];
    //刚开始newArr.length 就是0
    for (var i = arr.length - 1; i >= 0 ; i--) {
        newArr[newArr.length] = arr[i];
              
    }
    console.log(newArr);

    //数组排序 这里用的是冒泡排序算法
    var arr = [5,3,2,4,1];
    for (var i = 0; i <= arr.length - 1; i++) { // 外层循环管趟数
        for (var j = 0; j <= arr.length - i - 1; j++ ) { // 里面的循环管 每一趟的交换次数
            //内部交换两个变量的值1 前一个盒后一个数组元素相比较
            if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }

    }
    console.log(arr);

函数

    // 1. 求 1~100的累加和
    var sum = 0;
    for (var i = 1; i <= 100; i++) {
        sum += i;
    }
    console.log(sum);

    // 2. 求 10~50的累加和
    var sum = 0;
    for (var i = 10; i <= 50; i++) {
        sum += i;
    }
    console.log(sum);

    // 3. 函数就是封装了一段可以被重复执行调用的代码块 目的: 就是让大量代码重复使用
    function getSum(num1, num2) {
        var sum = 0;
        for (var i = num1; i <= num2; i++) {
            sum += i;
        }
        console.log(sum);
    }
    getSum(1, 100);
    getSum(10, 50);
    getSum(1, 1000);

- 函数声明:

    // 函数声明分为两步: 声明函数 和 调用函数
    // 1. 声明函数
    // function 函数名() {
    //     //函数体
    // }
    
    function sayHi() {
        console.log('hi~~');
    }
    // (1) function 声明函数的关键字 全部小写
    // (2) 函数是做某件事情,函数名一般是动词
    // (3) 函数不调用自己不执行
    // 2. 调用函数
    // 函数名();
    sayHi();
    //调用函数的时候千万不要忘记小括号

- 函数的参数:

    // 我们可以利用函数的参数实现函数重复不同的代码
    // function 函数名(形参1,形参2...) {// 在声明函数的小括号里面是 形参(形式上的参数)

    // }
    // 函数名(实参1,实参2...);// 在函数调用的小括号里面是实参(实际的参数)
    // 3. 形参和实参的执行过程
    function cook(aru) { // 形参是接收实参的  形参类似于一个变量
        console.log(aru);
    }
    cook('鱼香肉丝');
    cook('酸辣土豆丝');


    // 1. 利用函数求任意两个数的和
    function getSum(num1, num2) {
        console.log(num1 + num2);
    }
    getSum(1, 3);
    getSum(3, 8);
    // 2. 利用函数求任意两个数之间的和
    function getSums(start, end) {
        var sum = 0;
        for (var i = start; i <= end; i++) {
            sum += i;
        }
        console.log(sum);
    }
    getSums(1, 100);
    getSums(1, 10);
    // 3. 注意点
    // (1) 多个参数之间用逗号隔开
    // (2) 形参可以看做是不用声明的变量

函数形参和实参个数匹配问题

    function getSum(num1, num2) {
        console.log(num1 + num2);
    }
    // 1. 如果实参的个数和形参的个数一致 则正常输出结果
    getSum(1, 3); // 4
    // 2. 如果实参的个数多于形参的个数  会取到形参的个数
    getSum(9,3,2); // 12
    // 3. 如果实参的个数小于形参的个数  多余的形参定义为undefined  最终的结果就是 NaN
    // 形参可以看作是不用声明的变量  num2 是一个变量但是没有接受值  结果就是undefined  
    getSum(4); // NaN
    //建议 我们尽量让实参的个数和形参相匹配

小结:

  • 函数可以带参数也可以不带参数

  • 声明函数的时候,函数名括号里面的是形参,形参的默认值是undefined

  • 调用函数的时候,函数名括号里面的是实参

  • 多个参数中间用逗号分隔

  • 形参的个数可以和实参个数不匹配,但是结果不可预计,我们尽量要匹配