ECMA总结

词法

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

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)+"秒"
        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,149评论 0 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,797评论 0 38
  • 1.爱耍小聪明的人不少,比如总是跟别人讨价还价,或者在做某一件事情的时候 顺带做另外一些事情,很多人觉得这样做可以...
    多元思考力阅读 482评论 0 0
  • 前天早上,因为一件事情,我删掉了微信上的一个人。事后,一种恐惧油然在内心升起。仔细想想,这件事情的经过双方都有问题...
    耗尽生命写灵魂赞歌阅读 274评论 0 1
  • 一接到儿子他就问我:“你看我上去了?我的语文新课堂全做对了”我说:“看到了,还好昨晚的那个是,你改了,要不然因为是...
    亲子园阅读 593评论 0 2