zoukankan      html  css  js  c++  java
  • ECMAscript入门

                                                                  ECMAscript入门

    ECMAscript和javascript的关系:前者是后者的规格
    ES6和ECMAscript的关系:ES6 既是一个历史名词,也是一个泛指,含义是5.1版以后的 JavaScript 的下一代标准,涵盖了ES2015、ES2016、ES2017等等,而ES2015 则是正式名称,特指该年发布的正式版本的语言标准。
     
    let和const命令
    1、es6新增类似与var相似的let来申明变量,不同var的是let申明的变量只在let所申明变量的额代码块内使用,for循环的计数器,比较适合let来申明.
    2、let申明变量,一定先申明,后调用,否则报错ReferenceError,而for在神明之前调用值为undefind.即let没有变量提升现象
    3、es6规定,如果在区块中用let,const申明了变量,那么在声明之前都是不可用的,及暂时性死区现象
    4、规定let不允许在相同作用域内,重复申明同一个变量,如不能在函数内部重新神明参数
     
    块级作用域
    没有块级作用域的弊端:造成内层变量变量提升会覆盖外层变量用来计数的变量泄漏成为全局变量
    es6的块级作用域
    1、let为javascript新增了块级作用域
    2、es6中块级作用于可以任意嵌套
    3、内层作用域可以申明定义外层作用域的同名变量
     
    块级作用域与函数申明
    1、es6规定,块级作用域中申明函数的行为类似于let,在会计作用于外不可引用,但是在开发实践中如果改变了块级作用域内声明的函数的处理规则,会对老代码产生报错等很大影响。为了减轻因此产生的不兼容问题,ES6又规定,浏览器的实现可以不遵守上面的规定,有自己的行为方式如下:
                          允许在块级作用域申明函数
                          函数申明类似于var,可以提升到全局作用域或者函数作用域的头部
                          同时,函数申明亦可提升到锁在会计作用域的头部
    注意:以上三条规则仅适用于es6环境,即在es6规定,函数申明类似于var申明的变量
    2、考虑到环境因素导致问题,不提倡在块级作用域申明函数,如果确实需要,写成函数表达式而非函数申明语句
    3、es6块级作用域可以申明函数,只适用于运用大括号的情况下,否则会报错
     
    表达式:在块级作用域之前加上let x=do,块级作用域就变成了表达式
     
     
     
    const命令
    1、const申明一个常量的值,一旦申明,不再更改,这意味着const申明值赋值之后,立即进入初始化,后面都不可赋值,const只申明不赋值,会报错
    2、const与let一样,只在申明的作用域内有效
    3、const申明的变量也存在暂时性死区
    4、const申明的常量,不可重复申明
     
    本质
    const本质不是申明一个变量值固定不懂,而是规定变量所存储的地址不改变
    object。freeze:数组冻结
     
    es6申明变量的6种方法
    var function let const import class
     
    顶层对象属性
    顶层对象在浏览器环境指window对象,在node环境值得是global对象
    为保持兼容性,var function命名申明的变量,依旧是顶层对象的属性,let、construction、class命名申明的全局变量,不属于顶层对想的属性。
    同一段代码为了在不同环境能够取得顶层对象,一般都用this变量,但存在局限性
     
     
    变量的解析赋值
    1、数组的解析赋值:即模匹配赋值,等号两边模式相似,可以对应赋值
    2、存在解构不成功和不完全解构
    3、事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。
     
    默认值
    1、结构赋值允许默认值,且es6严格使用相等运算符===,如果不指定一个数组等于undefined,默认值不会生效
    2、默认值表达式惰性求值现象
     
    对象的解构赋值
    1、对象解构赋值不同于数组,变量必须与属性同名,才可取得相应的值
    2、对象赋值的内部机制,实现找到同名的属性,然后付给杜鹰的变量,真正被赋值的是后者,而不是前者,前者应该是匹配的模式
    3、对象变量的申明赋值必须一致,在let和const里如果赋值的变量以前申明过,会出现报错
     
    4、注意账面截图部分
    5、看上图,分清模式和变量
     6、上图为对象赋值嵌套代码实例
    7、对象也可以默认赋值,默认赋值有效的前提是对象的属性值严格当年等于undefined
    8、例如:
     
     
    字符串的解构赋值
     
     
    数值和布尔值的解构赋值
    解构赋值的规则是,如果等号右边的值不是对象或数组时,先将其转化为对象,由于undefined和null无法转化为对象,对它们解构赋值会报错
     
     
    函数参数的解构赋值
    1、
    2、函数参数的解构也可以使用默认值
     3、注意undefined会触发函数参数的默认值
     
     
    圆括号问题;
    es6规定,只有有可能导致解构的歧义,就不得使用圆括号,但是这条规则实际上不容易辨别,处理起来麻烦,所以建议不要在模式当中放置圆括号
     
    不能使用圆括号的情况
    1、变量申明语句中不得使用圆括号
    2、函数参数中,不得使用圆括号
    3、赋值语句中,不能将整个模式,或嵌套中的某个模式放在圆括号中
     
    可以使用圆括号的情况
    只有一种情况可以使用圆括号,赋值语句的非模式部分,可以使用圆括号
     
    用途
    1、交换变量的值
    2、函数只能返回一个值,有了解构赋值,可以把想返回的多个值放在数组或者对象种一起反回
    3、函数参数的定义
    4、快速提取json数据的值
    5、指定参数默认值
    6、.遍历map解构
    7、输入模块指定方法
     
     
     

     
     
     
     
    Problem are not stop signs;they are guidelines.
  • 相关阅读:
    (转)VC++多线程编程
    英文缩写汇总
    SINGLETON(单件)——对象创建型模式
    指针地址的修改
    我在csdn博客中的一些总结
    listener的执行先后问题
    css的精髓是布局,而不是样式——之三
    Jo——一个简单HTML5移动框架介绍
    深入了解javascript中的exec与match方法
    多ajax查询模拟一个整体的查询事务
  • 原文地址:https://www.cnblogs.com/chengzidea/p/6555400.html
Copyright © 2011-2022 走看看