美文网首页
关于ES6那些事儿

关于ES6那些事儿

作者: 人性本薄凉 | 来源:发表于2019-02-23 21:32 被阅读0次

    一:ES6的简介

    1.1996年javascript的创造者决定将javascript提交给标准化组织ECMA希望这种语言可以成为国际标准。

    2.之后ECMA把这一标准称之为ECMAscript。可以说javascript是ECMAscript的实现。es6则是js的规格。

    ****重要重要****

    ES6新增了一种独一无二的数据类型:Symbol。详情会在后面解释。

    即现在javascript的数据类型共有以下7种。

    String    Number    Boolean    null    undefined    Object    Symbol

    二:let和const命令

    关于let命令:

    1.不存在变量提升。

    2.从变量的使用到变量的声明属于暂时性死区。

    3.不允许重复声明。

    块级作用域

    1.js只存在函数作用域以及全局作用域,es6为es5生成了块级作用域。

    2.js的全局作用域相当于顶层作用域。

    eg:var a=0;window.a=0;

    es6新增的块级作用域会将全局作用域与顶层作用域区分。

    eg:let b=1;window.b==>undefined;

    2.块级作用域中声明函数只允许在{}中声明。

    const命令

    1.不允许重复声明;

    2.声明之后变不可改变;当声明一个对象时需注意

    eg:const a=0;a=3;==>报错

    eg:const obj={};obj.a=a;不报错 obj={};==>报错;

    解释:const声明的变量存储的是指向内存地址的指针,故不可赋值给其他,当声明的变量为对象时,可扩展此对象。

    3.ES6新增了let、const、import、class四种声明变量的方法

    三:变量的结构赋值

    数组的结构赋值

    1.ES6允许按照一定模式从数组或对象中提取值对变量进行赋值。

    eg:let [a,b,c]=[1,2,3];

    eg:let [a,[[bar],baz]]=[1,[[2],3]];

    不完全解构

    eg:let [a,[b],d]=[1,[2,3],[4]];==a=1;b=2;d=4

    解构赋值可设置默认值(只有在数组成员中严格等于undefined时,才可以使用默认值)

    eg:let [x=1]=[null];===>x=null

    eg:let [x=2,y=2]=[]===>x=2;y=2;

    对象的结构赋值

    1.对象的结构赋值,变量名必须与属性名同名才可以赋值

    eg:let { foo, bar } = { foo: "aaa", bar: "bbb" };

    foo // "aaa"

    bar // "bbb"

    eg:let {baz} = {foo:"aaa",bar:"bbb"};

    baz // undefined

    2.嵌套对象的解构

    let obj={p:["hello",{y:"world"}]};

    let {p:[x,{y}]}=obj;

    x //hello

    y //world

    p //报错(p is not defined)

    解释:对象解构赋值的是值,而不是模式,此时P就是模式,则不会进行赋值;

    下面将对p进行赋值

    let obj={p:["hello",{y:"world"}]};

    let { p, p: [x, { y }] } = obj;

    x // "Hello"

    y // "World"

    p // ["Hello", {y: "World"}]

    3.解构不成功的变量为undefined;

    let {foo}={bar:"baz"};

    foo //undefined

    4.如果解构对象为嵌套的对象,而且子对象的父级属性不存在,则会报错

    eg:let {foo:{bar}} = {bar:"baz"};

    相当于执行的为 foo.bar 因此时foo为undefined-所以报错

    字符串的结构赋值

    1.const [a,b,c]="boy";

    a //b

    b //o

    c //y

    1.let {length : len} = 'hello';

    len // 5

    数值和布尔值的结构赋值

    1.结构赋值的规则,只要等号右边不是数组或对象,就先将其转化为对象

    eg:let {toString:s}=123;

    s===Number.prototype.toString //true

    eg:let {toString:s}=true;

    s===Boolean.prototype.toString //true

    函数参数的结构赋值

    1.函数的参数也可以使用解构赋值

    eg:function move([x,y])={return x+y};move([1,2]) //3

    2.函数的参数也可以使用默认值

    eg:function move({x=0;y=0}={}){return [x,y]};

    move({1,2}) //[1,2]

    move({})==move() //[0,0]

    上面的函数的参数是一个对象,通过这个对象进行解构,得到变量x/y的值,若解构失败,则等于undefined

    eg:function move({x,y}={x:0,y:0}){return [x,y]}

    move({1,2}) //[1,2]

    move({}) //[undefined,undefined]

    move() //[0,0]

    字符串的扩展

    1.字符串的遍历器接口

    eg:for(key of 'foo'){console.log(key)};  //f o o

    这个遍历器最大的优点是可以识别大于0xFFFF的码点

    2.js只有通过indexof来判断是否包含某个字符串,ES6新增了三个方法来判断一个字符串是否包含另一个字符串

    eg:let s="hello world!";

    eg:s.includes("o",1) //true  //判断是否包含

    eg:s.startsWith("hello",1) //true  //判断是否在原字符串的开头

    eg:s.endsWith("!",1); //true  //判断是否在字符串的结尾

    第二个参数表示开始搜索的位置

    endsWith较与其他两个方法的区别为:

    endsWith:是针对于前N个字符

    startsWith-includes:是指从第n个字符到结尾位置

    3.字符串的repeat的方法

    eg:"x".repeat(3) //'xxx';

    若是小数则取整处理

    eg:"x".repeat(2.9) //"xx"

    若参数为不是数值,则会转换为数值

    eg:"x".repeat("3") //"xxx"

    若参数为小于-1的负数 则会报错

    若参数为-1-0的数,则为空字符串

    "x".repeat(-0.7) //""

    4.padStart(),padEnd()方法

    ES2017引入了补全字符串的方法,

    eg:"x".padStart(4,"ab")  //abax

    eg:"x".padEnd(4,"ab")  //xabab

    若设置补全字符串长度小于原字符串的长度时-则保持不变

    eg:"xxx".padStart(2,"ab") //xxx

    若省略第二个参数,默认使用空格补全

    eg:'x'.padStart(4) //"  x"

    字符串补全的用途

    提示字符串格式

    eg:'09-12'.padStart(10,"YYYY-MM-DD") //YYYY-09-12

    模板字符串

    eg:let color="red";$("result").append("this is a"+a+'apple');

    使用字符串模板之后:`` 反单引号

    eg:$(result).append(`this is a ${color} apple`);

    若变量表示用到``则使用\进行转义

    eg:console.log(`\`09\`123`);

      //`09`123

    正则的扩展

    1.关于RegExp构造函数

    es5中构造函数的参数如下

    eg:var reg=new RegExp("xyz","i");

    或者 var reg=new RegExp(/xyz/);此时不能有第二个参数出现,否则会报错

    ES6中允许在这种情况下允许第二个参数的设置

    eg:var reg=new RegExp(/xyz/ig,'i').flags = 'i'

    并且此正则对象的flags以第二个参数为准

    2.u修饰符

    ES6新增了u修饰符来识别码点大于0XFFFF的unicode字符

    3.ES6中新增了判断是否含有u修饰符的方法

    eg:let reg=/hello/;let reg1=/hello/u;

    reg.unicode //false

    reg1.unicode  //true

    3.正则的扩展稍后跟进。。。

    数值的扩展

    1.二进制与八进制的表示法

    ES6提供了二进制和八进制新的表示法。分别用前缀0b/0B 0o/0O表示

    ES5的严格模式声明八进制不允许使用前缀0表示,ES6进一步明确使用0o表示

    八进制转换为十进制

    Number('0o111')  //7

    2.ES6在Nuber对象上新增了Number.isFinite()与Number.isNaN()方法

    Number.isFinite()判断数值是否为有限的

    eg:Number.isFinite(15) true

    eg:Number.isFinite(Infinity) false

    Number.isNaN()判断数值是否为NaN

    Number.isNaN(5)  false

    Number.isNaN(NaN) true

    3.ES6将全局的parseInt()和parseFloat()方法转移到Number对象上

    ES5的写法:

    parseInt("12.12")  //12

    parseFloat("12.122323%"); //12.122323

    ES6的写法

    Number.parseInt("12.12")  //12

    4.Number的isInteger()用来判断数值是否为整数

    Number.isInteger(23) //true

    Number.isInteger(20.1) //false

    需要注意的是23.0==23

    Number.isInteger(23.0) //true

    5.ES6在Number对象上新增了常量Number.EPSILON

    表示了1与大于1的最小浮点数的差

    6.安全整数和Number.isSafeInteger()

    Number.isSafeInteget(15)  //true

    Number.isSafeInteger(1.3) //false

    7.ES6为Math对象新增了17个方法

    Math.trunc()去除小数部分,返回整数

    eg:Math.trunc(5.4) //5

    eg:Math.trunc(-0.9) //-0

    对于无法取整的参数,等于NaN

    eg:Math.trunc(NaN) //NaN

    判断数值为整数或者负数或者0--Math.sign()

    返回五种结果如下:若参数为非数值则先转换为数值再进行判断

    Math.sign(5)  //+1表示整数

    Math.sign(-5) //-1表示负数

    Math.sign(0)  //+0

    Math.sign(-0) //-0

    Math.sign(NaN) //NaN

    Math.sign("9") //+1

    其他方法稍后更新。。。

    相关文章

      网友评论

          本文标题:关于ES6那些事儿

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