美文网首页
ECMA总结

ECMA总结

作者: 时修七年 | 来源:发表于2018-07-12 17:57 被阅读5次

    词法

    编程语言的词法结构是一套基础性的规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了变量名是什么样的、怎样写注释、以及程序语句之间如何分割等规则。

    2.1 字符集:js是用Unicode字符集编写的。
    2.1.1 区分大小写
    2.1.2 空格、换行符和格式换行符 
    js会自动忽略空格和换行,因此作为语句分割的';'可以省略。但也有两个特例
    ! break,return,continue之后不可以紧跟换行
    return
    true  //return;true
    ! ++ --将作为下一行的前缀;
    x
    ++
    y  //x++;y
    
    

    拓展

    1. Unicode

    变量

    • 变量命名规范
      1.区分大小写
        var test = 'hello';
        var Test = 'world';
        console.log(test) // hello;
    
    • 2.标识符
    2.1 组成必须是数字,字母,下划线以及$,且不能以数字开头;
    2.2 标识符不能是关键字,保留字、true|false或者undefined,null;
    2.3 遵循驼峰命名规范
    

    关键字/保留字


    类型

    在编程语言中能够表示并操作的值的类型称做数据类型

    js中的数据类型分为两类:
     原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)
     对象数据类型:数组、函数、Date、RegExp、Error
     Symbol
    
    • 3.变量 提升
    变量:将数据存储起来以备将来使用的量;
            声明变量:var 无块级作用域,可以重复声明,可以改变值;
                      const有块级作用域,不可以重复声明,不可以改变值
                      let有块级作用域,不可以重复声明,可以改变值
                      var进行变量提升,而let和const不进行变量提升
    

    运算符/操作符

    操作符和运算符
        - delete操作符
        - ,号操作符
        - in操作符
    
    运算符:
        - 一元运算符
            只能操作一个数的运算符;
    
        - 算数运算符
            + 拼接和求和 对于非数字类型优先执行拼接
            - 相减  会先转化为数字类型,然后再取差
            * 
            / infinity
            %
            isNaN
            ++
            --
    
        - 关系运算符
            如果两个数都是string,则比较第一个字母的ASCII码;
            如果两个都是数字,比较数值
            如果一个数值一个字符串,则把字符串准换为数字,再比较
    
        - 逻辑运算符
            &&  第一个为真,返回第二个
            ||  第一个为假,返回第二个
            !  如果表达式为真,则返回true
    

    语法

    语句


    对象

    1.语法和数据类型

    - 区分大小写
    - 注释
    - 关键字和保留字
    - 标识符
    - 变量
    

    - 数据类型
    - 数据类型检测
    

    2.操作符和运算符
    - delete操作符
    - ,号操作符
    - in操作符


    运算符:
    3.表达式和运算符

        什么是表达式
            表达式相当于短语,最简单的表达式是字面量或者变量名;
            单一的字面量和组合的字面量都可以称之为表达式
            一元运算符
            只能操作一个值的运算符;
            1.递增++和递减--;
            前置递增/递减和后置递增/递减的区别
            在没有赋值操作,前置和后置都是一样的
            在赋值操作时,如果递增或递减运算符前置,那么前置的运算符会先累加或累减再赋值;如果递增或者递减运算符后置则先赋值然后再累加或者累减;
            ++对数值字符串有一个隐含的转型功能,var box = "1";box++ ---2;而box+1 = "11";
    
            +&-运算符;
            敲一笔例子;
            关系运算符
            什么是关系运算符
            用于进行比较的运算符称为关系运算符;大于(>),小于(<),等于(==),大于等于(>=)小于等于(<=);不等于(!=)全等(===)不全等(!==);
            比较的运算法则
            如果两个都是Number类型,则互相比较;
            如果两个都是数值字符串则比较第一位字符;
            如果两个都是字符串类型,则比较ASCII编码;
            如果有一个是字符串数值类型,则转为数值然后比较;
            如果有一个是对象,则调用toString或Valueof;
    
            在相等和不等的比较上,如果操作数是非数值,则遵循以下规则
            一个操作数是布尔值,则比较之前将其准换为数值,false转0,true转为1;
            一个操作数是字符串,则比较之前将其准换为数值再比较;
            一个操作数是对象,则先调用valueOf()或者toStirng()方法后在和返回值做比较
            不需要任何转换的情况下,null和undefined是相等的;
            一个操作数是NaN,则==返回false !=返回true;并且NaN和自身不等;
            两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象则返回true;
            在全等和不等的判断上,只有值和类型都想等,才返回true;
            **注意undefined在比较时不会自动准换,而字符串可以;
    - 一元运算符
        只能操作一个数的运算符;
    
    - 算数运算符
        + 拼接和求和 对于非数字类型优先执行拼接
        - 相减  会先转化为数字类型,然后再取差
        * 
        / infinity
        %
        isNaN
        ++
        --
    
    - 关系运算符
        如果两个数都是string,则比较第一个字母的ASCII码;
        如果两个都是数字,比较数值
        如果一个数值一个字符串,则把字符串准换为数字,再比较
    
    - 逻辑运算符
        &&  第一个为真,返回第二个
        ||  第一个为假,返回第二个
        !  如果表达式为真,则返回true
    

    3.表达式和语句
    - 表达式
    - 控制语句和错误调试
    - 循环和迭代

    4.函数
    - 函数的作用
    - 便于复用
    - 可维护性强
    - 使程序变得简短清晰,提高可读性;

        - 定义函数的两种方式: 
        1.定义一个函数(定义和声明同时进行)
        function show(){
    
        }
        2.函数表达式
        var show = function(){
    
        }
    
        3..函数声明提升
        声明一个函数:声明和定义同时完成;并且会提升到当前作用域的顶部;
    
        4..形参和实参 
    
            *默认参数
                - b =  b||5
                - es6 function(b=5,c=3);
                
             var a = 1 ;
             function show(a){
                console.log(a); //1
             }
    

             a = 1
    
             function show(a){
             consoe.log(a)  //undefined;
             }
    
             show();
    
    
    
             -------------------
    区分两次执行的不同并说明原因:
            function outer(a){
              a =  a||1;
              console.log(a);
              
              show();
              
            }
    
    
              function show(){
                alert(a);
              }
    
    
            outer()
    
    
            ----------
            function outer(a){
              a =  a||1;
              console.log(a);
              function show(){
                alert(a);
              }
              show();
              
            }
    
            outer()
    

    原因:作用域链

        5...匿名函数
    
        6.自执行函数
    
        7...嵌套函数
    
         ...箭头函数
            箭头函数是函数的简写形式
            表达式:
                (a,b)=>{
                    return 
                }
            箭头函数的简写形式
                - 简写条件
                    - 只有一个参数,则可以去掉括号
                    - {}里只有一个ruturn语句,则可以省略return和{};
            eg: let arr1 = [91,72,65,56,89];
                 let arr2.map((item)=>{
                    if(item>=60){
                    return true;
                    }else{
                        return false;
                    }
                 })
            简写:
                let arr2.map(item=>item>=60;)
    
        8..函数递归
    
           - 找出相邻两个函数的关系
           - 确定临界值
    
         - 实现阶乘
          fn(n) = fn(n-1)*n
          if(n==1){
    
          }
         - 实现100以内的加法
         fn(n) = fn(n-1)+n;
         if(n=1){
            return 1
         }
    
         9.匿名函数
    
         10.闭包
            函数运行在定义他们的作用域中,而不是在函数运行的作用域中,只要f定义在F中,它的作用域就会保留下来,即使F已经执行完成;但是只有返回f才可以访问这个作用域;
    

    --- 6.数组
    -
    - 三大排序思想;

    --- 7.字符串

    -创建函数的三种方式
        - new String();
        - String()
        - var a = "string";
    - 字符串拼接
        - "string"+a;
        - 字符串模版 a+${a};
    - 
    

    --- Date Math 和正则表达式
    常用Math

    Math.pow(3,2)   //9 3的二次方
    Math.round(3.4) //3  四舍五入运算
    Math.max(1,10,9,7,5,3)  //10  返回最大值
    Math.min()   //返回最小值
    Math.floor()  //向下取整
    Math.ceil()   //向上取整
    Math.random()  //随机生成一个数
    

    Date
    Date常用之获取本地时间

        function format(){
            const time = new Date();
            const year = time.getFullYear();
            let m = time.getMonth()+1;
            let month = Zero(m);
            let d = time.getDate();
            let day = Zero(d);
            const w = time.getDay();
            var str = "日一二三四五六",week = str.charAt(w);
            const hour = time.getHours();
            const minutes = time.getMinutes();
            const seconds = time.getSeconds();
            return `${year}年${month}月${day}日 周${week} ${hour}点${minutes}分${seconds}秒`
        }
             // 补零函数
        function Zero(value){
            return value<10?"0"+value:value;
        }
    
        const localTime = format();
        console.log(localTime)
    
    

    Date常用之获取两个时间的差值

    function getSpanTime() {
                const nowTime = new Date();
                const targetTime = new Date("2018/7/12 23:59:59");
              //此处不能用“—”,因为ie6-8存在兼容性问题
                const nowSpan = nowTime.getTime();
                const tarSpan = targetTime.getTime();
                const elapsed = tarSpan - nowSpan;
                // console.log(elapsed)
                const hours = Math.floor(elapsed/(1000*60*60));
                let diffTime = elapsed - hours*1000*60*60;
                const minutes = Math.floor(diffTime/(1000*60));
                diffTime -= minutes*1000*60;
                const seconds = Math.floor(diffTime/1000);
                return Zero(hours)+"时"+Zero(minutes)+"分"+Zero(seconds)+"秒"
            }
    
    

    相关文章

      网友评论

          本文标题:ECMA总结

          本文链接:https://www.haomeiwen.com/subject/hsmrpftx.html