ECMAScript|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没有出现之前,这种写法是不会报错的;
【ECMAScript|ECMAScript 6学习(一)】也就是为了杜绝这种不规范的写法,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;
第三行语句与第一行语句的性质一致。
今天的学习就到这里了,明天继续,努力 加油!!!

    推荐阅读