• 002 Javascript(025


    [A] 认识函数

     1. 函数声明:

            function 函数名(形参1,形参2,......){
                函数体;
           return 表达式; }   

      【注】函数名最好要见名思意

      整个函数在运行时,遇到return会终止函数运行,跳出函数

      2. arguments讲解

        【注】每一个函数内都有一个arguments,这是系统内置的

           arguments是用来存储实际传入的参数

        属性:

          arguments.length  输出当前里面存储的参数的个数

                    【注】下标从0开始

      

      3. 函数作用域

        任何程序在执行的是偶都要占用内存空间的,函数调用的时候也是要占用内存空间的

        函数调用时,系统会分配对应的空间给整个函数使用

        【注】在函数外声明的变量,为全局变量,作用域是全局

           在函数体内声明的变量,为局部变量,作用域为函数体内部

      4. 递归

          函数递归:在面试中,若面试官问及函数递归方面的知识,则对你的要求较高

            大部分公司会明文禁止使用递归的

        递归需满足以下三个特点:

            1. 函数自己调用自己

            2. 一般情况下是有参数的

            3. 一般情况下有 return

        【注】递归可以解决循环所能解决的所有的事

           递归都可以被写出来,但是不知道为什么是对的

        【注】递归会大量占用内存,尽量少用

    [B] 认识数组

        数组:用一个变量存储一堆数据的数据结构

        数据类型:

            基本数据类型

            特殊数据类型

            复合 / 引用数据类型

        数组是符合 / 引用数据类型的一种

        1. 数组声明:

            a. 通过new创建数组  

                 格式:var 数组名 = new Array(元素1,元素2,......)

                  var a = new Array(1,"true","hello");
    

            b. 省略new创建数组

                 格式:var 数组名 = Array(元素1,元素2,......)

                    var a = Array(1,"true","hello");                
    

            c. 数组常量进行赋值(JS中一般用中括号[ ];)

                 格式:var a = [元素1,元素2,......]

                  var a = [1,"true","hello"];
    

       【注】前两种方法中,当元素只有一个且为数字(如10)时,它表示创建了一个长度为定值(如5)的空数组。

        2. 数组的属性

            数组.length    返回数组元素的个数

                     数组元素:将存储在数组中的内一个元素叫做数组元素

        3. 数组元素的访问

            数组[下标]    下标从0开始,如:a[2]

        4. 数组的遍历

            a.  for循环

                // 依次输出数组中的元素
             var a = [1,"true","hello",4,6,"29s"];     for(var k = 0; k < a.length; k++){      document.write(a[k],"<br>");     }

            b.  for...in   快速遍历 

                var a = [1,"true","hello",4,6,"29s"];
                for(var k in a){
                    document.write(a[k],"<br>");
                }
    

    [C] 数组的方法

       1. 栈结构:

           结构:从一头进,从同一头出

           特点:先进后出

        数组的两个方法形成栈结构:

           push()

             格式:  数组.push(参数1,参数2,.......);

             功能:  从数组尾部添加元素

             返回值: 添加完元素之后的数组长度,标量

           pop()

             格式:  数组.pop()  无参数

             功能:  去掉数组元素的最后一个元素

             返回值: 取下的这个元素

       2. 队列结构:

             结构:从尾部进,从头部出

             特点:先进先出

            

         数组的两个方法形成队列结构:  

           push()

             格式:  数组.push(参数1,参数2,.......);

             功能:  从数组尾部添加元素

             返回值: 添加完元素之后的数组长度,标量

           shift()

             格式:  数组.shift()  无参数

             功能:  从数组头部取下一个元素

             返回值: 取下的这个元素

           unshift()

             格式:  数组.unshift(参数1,参数2,......)

             功能:  从数组头部插入元素

             返回值: 插入元素后的数组

        3. 数组的其他方法

          concat()

            功能:合并数组

            语法: 数组.concat(数组1,数组2,.....)   

            返回值:合并后的新数组,原数组1,数组2不变

           【注】被合并的数组是被当成一个数组进行合并,即将数组中的每个元素分别拆出来再合并,而不是将这个数组当成一个元素连接到原数组中

         slice()

            功能:获取数组中指定区域 [ start, end) 的元素

            语法:数组.slice(start, end)  包含start,不包含end

            返回值:提取出的新数组,原数组不变

         splice()

            功能:获取数组中指定区域 [ start, end) 的元素

            语法:数组.splice(start, length, 数据1,数据2,.......)      

               start: 开始截取的位置

               length:截取元素的长度

               数据1,数据2,......:插入的数据

            【含义】在数组中的start位置起截取length个长度的元素,若后面还有数据1,数据2....等多个数据,则是将start开始的length个长度的元素,替换为数组1,数组2,......

            返回值:截取的数组,原数组不变

         join()

            功能:将字符串中的元素按照指定的连接符拼接起来

            语法:数组.join(连接符)

            返回值:返回拼接好的字符串

         reverse()

            功能:将数组元素进行逆序

            语法:数组.reverse()

            返回值:返回已经逆序的新数组,原数组已变为逆序后的数组

         sort()

            功能:将数组元素进行排序

            语法:数组.sort()

            返回值:已经排序好的新数组

            【注】该默认的排序是将数组元素看做字符串,然后进行比较的,古对于纯数字把数组的比较会出错

            解决办法:通过自定义函数来解决

            var a = [2,95,62,34,6,42,15,83];
            a.sort(function(value1, value2){
                return value1 - value2;  //若想从小到大排序,则为value2 - value1
            })
            var c = a.reverse();
            document.write(c);
    

    [D] 数组的引用

        复合数据类型中,名与值的连接关系就是引用。即数据名中存储的是数据的引用

            var a = [2,5,7];
            var b = a;
            b = [7,4];
            document.write(a,"<br>")
            document.write(b);

        输出结果:

            2,5,7

            7,4

     [E] 声明提升和省略var

      1. 声明提升:所谓声明提升,是指在当前作用域,声明的变量和函数,会直接提升整个代码的最前面运行。

         JavaScript中,一段程序在分配内存的时候会一次性全部分配配好,这一过程在代码的预编译阶段完成。

         代码的预编译:在所有代码运行之前,计算机会将代码从头到尾看一遍

                将这个程序运行所需要的空间一次性分配好。

      2. 省略 var 声明变量

        在声明变量时的常规语法是: var 变量名 = 变量值;

        而当省略var声明变量时,变量会被系统强制认定为全局变量,不会报错

        【注】不建议这样写

    [F] 二维数组

      数组存储数据是在弄一个变量中存储多个元素,而这每些元素可以为任意的数据类型

      故二维数据实际上也是一种一位数组,只不过该数组中的每一个元素都是一个一位数组

      

    [G] 冒泡排序

      规则:前后两个数,凉凉进行比较,若符合交换条件,则两个数交换位置,第一轮结束之后,第二轮从第二个数开始,以此类推

    [H] 选择排序

      规则:从现有的数中选择出最小(或最大)的一个元素,放在第一位,再从剩下的数中选择出最小(或最大)的一个元素,放在第二位,以此类推。

    [ I ] 数组练习

      1. 随机给出一个五位以内的数,然后输出这个数有多少位,每位是多少

      2. 编写一个函数has(arr, 60),判断数组中是否存在60这个元素,返回布尔值

      3. 条形码验证

    [J] ECMAScrit5的严格模式

      在正常运行模式下,某些不规范的写法会被系统自动矫正。

      在ECMAScript5中增加了第二种运行模式:严格模式(Scrict mode),这就是让JavaScript在更严格的条件下运行。

      严格模式的目的:

        1. 消除JavaScript语法的一些不合理,不严谨之处,减少一些怪异行为;

        2. 消除代码运行的不安全之处,保证代码运行的安全性;

        3. 提高编译器效率,提高运行速度;

        4. 为未来新版本的JavaScript做好铺垫。

      【注】严格模式体现了JavaScript更合理,更安全,更严谨的发展方向,包括IE在内的主流浏览器,都已经支持它。

      

      【使用】:在所需要的进行严格模式的作用域下,单独一行书写:"use strict"

          【注】在当前作用域下,若使用了严格模式,则该作用域下运用的外部文件,也必须遵守严格模式,故尽量不要在全局使用严格模式

      【严格模式的严格之处】

          1. 变量使用前必须声明;

          2. 函数的形参名不能重复(非严格模式下,形参名可以重复,不会报错,只不过后面的同名形参会覆盖掉前面的)

          3. 非严格模式下,在函数内部修改形参值会同时改变arguments的值,反过来在函数内部修改arguments的值也会同时改变形参的值;

           而在严格模式下,函数内部形参值的修改不会改变arguments的值,反过来在函数内部修改arguments的值也不会同时改变形参的值;

          4. 新增了很多保留字

              implements,interface,let,package,private,protected,static,yield

    [K] ECMA5 新增数组的方法

        1. indexOf()

            格式:数组.indexof(item, start); 

            参数:item  任意数据

               start  下标,可以不传入,默认为0

            功能:在数组中查找第一次 item 出现的下标,从 start 开始去查找

            返回值:-1  表示没查找到

                >=0 表示查找到的元素首次出现的下标

        2.  forEach 数组遍历

            forEach无返回值

            使用方法:

            // var arr = [10,20,30,40,50,60,70,80];
            // arr.forEach(function(item, index, arr) {
            //     item: 当前遍历到的元素
            //     index: 当前遍历到的元素的下标
            //     arr数组本身
            // });
            【注】若数组arr为二维数组,则只会将其认定为一位数组进行操作

        3. map()  映射

          功能:实现映射,根据一段固定的运算公式,把原来的数组的每一个元素根据这个运算公式进行映射,然后放在新数组的同一个位置,而原数组不变。

          返回值:映射后的新数组

          使用方法:

            var arr = [10,20,30,40,[2,5,8],50,60,70,80];
            var qw = arr.map(function(item, index, arr) {
                //     item: 当前遍历到的元素
                //     index: 当前遍历到的元素的下标
                //     arr数组本身
            
           // 遍历要做的事情,也就是映射关系 return item * 2; }); document.write(arr,"<br>"); document.write(qw);

          结果:
            

           【注】可看出,map方法只能处理一维数组

        4. filter()  过滤

            var arr = [10,20,30,40, 50,60,70,80];
            var qw = arr.map(function(item, index, arr) {
                //     item: 当前遍历到的元素
                //     index: 当前遍历到的元素的下标
                //     arr数组本身
            
           // 过滤的条件
                return item > 20;
            });
            document.write(arr,"<br>");
            document.write(qw);

          结果:

            

         5. some()  查找是否有符合条件的元素

              功能:查找数组中是否有符合条件的元素,若有,返回true,若无返回false

              【注】该方法存在短路操作,即只要查找到一个存在的元素,后面的元素将不再被查找

            var arr = [10,20,30,40, 50,60,70,80];
            var qw = arr.some(function(item, index, arr) {
                //     item: 当前遍历到的元素
                //     index: 当前遍历到的元素的下标
                //     arr数组本身
            
           // 过滤的条件
                return item > 20;
            });
            document.write(arr,"<br>");
            document.write(qw);

            结果:

              

         6.  every()  查找每一个

            功能:在数组中查找每一个元素是否符合条件,全部符合返回true,有一个不符合就返回false。

            【注】该方法存在短路操作,即只要发现有一个不符合条件,则后面的元素将不再被遍历。

            var arr = [10,20,30,40, 50,60,70,80];
            var qw = arr.every(function(item, index, arr) {
                //     item: 当前遍历到的元素
                //     index: 当前遍历到的元素的下标
                //     arr数组本身
            
           // 过滤的条件
                return item > 20;
            });
            document.write(arr,"<br>");
            document.write(qw);

            结果:

              

          7. reduce()  归并

    newarr = arr.reduce(funcetion(pre, next, index, array){
       // pre:上一次return后面的值
       // next:从下表1开始,当前遍历到的元素
       // index:当前遍历到的下标;
       // arr:当前数组;
    })
                           
  • 相关阅读:
    api示例
    Windows+Ubuntu文件互传
    UI
    事件
    插件开发入门
    文摘
    刘海屏适配
    APT
    热修复
    进程保活
  • 原文地址:https://www.cnblogs.com/carreyBlog/p/13045079.html
Copyright © 2020-2023  润新知