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、输入模块指定方法

时间: 2025-01-13 18:56:53

ECMAscript入门的相关文章

《ECMAScript 6 入门- 第三章 字符串的扩展》 —— 摘抄

1. codePointAT方法 JavaScript内部,字符以UTF-16的格式储存,每个字符固定为2个字节.对于那些需要 4个字节储存的字符(Unicode编号大于0xFFFF的字符),JavaScript会认为它们是两个字符.ES6提供了codePointAt方 法,能够正确处理4个字节储存的字符,返回一个字符的Unicode编号. codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法. function is32Bit(c) { return c.codeP

《ECMAScript 6 入门- 第四章 数值的扩展》 —— 摘抄

1. 二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b和0o表示. 0b111110111 === 503 // true 0o767 === 503 // true 八进制用0o前缀表示的方法,将要取代已经在ES5中被逐步淘汰的加前缀0的写法. 2. Number.isFinite(), Number.isNaN() ES6在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法,用来检查Infinite和NaN这两个

《ECMAScript 6 入门- 第一章 lef和const命令》 —— 摘抄

1 . lef命令 ES6新增了let命令,用来声明变量.它的用法类似于var,let声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b //1 2.const命令 const也用来声明变量,但是声明的是常量.一旦声明,常量的值就不能改变. const PI = 3.1415; PI // 3.1415 PI = 3; PI // 3.1415 const PI =

ECMAScript 6入门

预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数FireFox了.具体情况可以在这里查看. 关于 ECMAScript 6 草案,我在博客里头复制了一份,可以点击这里. JavaScript的内容是越来越丰富,在ES6中还添加了模块(module)和类(class),感觉他已经失去了曾经的单纯了,不知道这些新功能的补充对开发者来说是福音还是负担.

《ECMAScript 6 入门- 第二章 变量的解构赋值》 —— 摘抄

1.数组的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 旧做法: var a = 1; var b = 2; var c = 3; ES6做法: var [a,b,c] = [1,2,3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. var [foo,[[bar],bad]] =

ES6箭头函数(节选自《ECMAScript 6 入门》)

基本用法 ES6 允许使用"箭头"(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分. var f = () => 5; // 等同于 var f = function () { return 5 }; var sum = (num1, num2) => num1 + num2; // 等同于 var

ECMAScript 6 入门学习笔记(零)——开始

所有es6笔记都是我自己提出来的一些点,没有很详细的例子什么的,这个链接就是我看的教程,有需要的可以看看.(http://es6.ruanyifeng.com/#docs/intro) 1.ECMAScript 和 JavaScript 的关系 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现. 2.ES6 与 ECMAScript 2015 的关系 ES6 既是一个历史名词,也是一个泛指,含义是5.1版以后的 JavaScript 的下一代标准,

ECMAScript 6 入门之新的数据类型Symbol

1.Symbol,一个每次创建都不一样的值 Symbol undefined null Boolean String Number Object let c=Symbol("这是一个Symbol"); let a=Symbol(); let b=Symbol(); console.log("a:",a); console.log("b:",b); console.log("c:",c);console.log(a===b);

ECMAScript 6 入门之变量的解构赋值

1.数组 1. var a=1,b=2,c=3; console.log("a:",a) console.log("b:",b) console.log("c:",c) var[q,w,e]=[4,5,6]; console.log("q:",q) console.log("w:",w) console.log("e:",e) 2. var[q,[w,e]]=[4,[5,6]]; con