ECMAScript 6学习(一)

本人是android开发的,由于最近React Native的火热,再加上自己完全不懂JS的语法,俗话说的好"落后就要挨打",虽然不知道谁说的,不过很有道理.

所以从今天开始正式进入ECMAScript的学习

学习书籍《ECMAScript 6 入门 》

let和const命令


首先作为一名android狗,我就用java的语法来理解ECMAScript

相对于java 的多种多样的声明(int 、string、double等 ),ECMAScript的声明 就只有 

var 、let和const "吧" (原谅我用"吧"这个词,因为我也是刚接触,目前我就见到过这三个 (┬_┬)!!!);

其中let是ECMAScript 6 新添加的命令,和var一样都是用了声明变量的,而const是用来声明常量的;

let和var的区别:

var可以跨代码块,也就相当于java语言中 public,对的就是全局变量;

 let只在本代码块有效,相当于java语言中 private,也就是局部变量;

{

let a=10;

var b=1;

}

a // ReferenceError: a is not defined.

b // 1

上面的代码大致就是说明了情况

let为局部变量,即在代码块中有效,已离开代码块就会报错;

var是全局变量,所以在哪里都不会报错的(就我 学习的进度来看,var 不管在哪里声明都是全局变量,也就是说只要你声明了,都可以获得该变量的值);

暂时性死区

在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”

var tmp  = 123;

if(true){

tmp = 'abc';  //ReferenceError 这句话会报错

let tmp

}

这个时候我就奇怪了,为什么那一行会报错呢,按照执行顺序来看是没问题的.

原来在ECMAScript 中有这么一种写法就是先使用后定义

即: 

tmp = 123;

var tmp;

也就是说在let没有出现之前,这种写法是不会报错的;

也就是为了杜绝这种不规范的写法,let命令中有这种规则,而且更加夸张的规范,只要是代码块中有 let声明,那么即便是外面出现 var 声明的同名变量,在let之前执行,也会视为 let命令声明变量之前,使用该变量,从而出现"暂时性死区".

let变量不允许重复声明

let在相同的作用域,不能重复声明同一个变量

//错误

funcation(){

let a = 10;

var a = 22;

}

//错误

funcation(){

let a = 10;

let a = 12;

}

以上两种写法都是错误的.

因此,不能在函数内部重新声明参数。

functionfunc(arg){

letarg;// 报错

}

functionfunc(arg){

    {

     letarg;// 不报错

   }

}

map()方法

map() 用于批量转换,括号里面可以放一个方法

例:

[1, undefined, 3].map((x = 'yes') => x);

这句话的意思是用map() 批量对[1, undefined, 3] 这个数组进行处理

处理的方式是

(x = 'yes') => x;

即:

function xxx(x='yes'){

return x;

}

的缩写,此方式在ECMAScript6才支持;

其中(x='yes')就是x参数的默认值;

圆括号的使用

不能使用圆括号的情况

1.变量声明语句中,不能带有圆括号

 例如:

 let [(a)] = [1];

 let {x: (c)} = {};

 let ({x: c}) = {};

 let {(x: c)} = {};

 let {(x): c} = {};


 let { o: ({ p: p }) } = { o: { p: 2 } };

 上面的语句都会报错


2.函数参数中,模式不能带有圆括号

 例如:

 function f([(z)]){return z};

 上面的语句都会报错


 3.赋值语句中,不能将整个模式,或嵌套模式中的一层放在圆括号里


({ p: a }) = { p: 42 };

([a]) = [5];

[({ p: a }), { x: c }] = [{}, {}];

[({ p: a }), { x: c }] = [{}, {}];

上面代码将整个模式放在圆括号之中,导致报错。

可以使用圆括号的情况

可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。

[(b)] = [3]; // 正确

({ p: (d) } = {}); // 正确

[(parseInt.prop)] = [3]; // 正确

上面三行语句都可以正确执行,因为首先它们都是赋值语句,而不是声明语句;

其次它们的圆括号都不属于模式的一部分。

第一行语句中,模式是取数组的第一个成员,跟圆括号无关;

第二行语句中,模式是p,而不是d;

第三行语句与第一行语句的性质一致。

今天的学习就到这里了,明天继续,努力 加油!!!

你可能感兴趣的:(ECMAScript 6学习(一))