es6语法学习-1

学习ES56语法
http://es6.ruanyifeng.com/?spm=5176.100239.blogcont82041.28.r2N91S#docs/let

1、块级作用于

用 let来来代替之前 由于var块级作用于,变量泄漏的问题

Let声明变量,只在当前块级作用域中有效

对于没有声明的变量,先使用,再用let声明则会报错
块级作用域中相同变量名不允许重复声明
可以任意嵌套

ES5中块级作用域中,内部的作用域函数可以在外部没有此变量或者函数的时候得到提升,
称为函数提升(目的是为了兼容浏览器)

在ES6浏览器环境中,可以按照函数提升规则
在ES6其他环境中,则会报错,不会将内部函数或者变量进行作用域提升

ES6块级作用域声明函数,仅限 函数在大括号包围函数的情况下,才成立

最好将函数写成 表达式 let f = function(){};比较好,放在块级作用域中

do{ 表达式};则可以返回表达式的值

Const 常量,当用const声明对象,只是保证对象内存地址不变,但是内容可以变

Es6 有 let const var function import class 六种声明变量方法

Global顶层对象,

2、变量的解构赋值

let [x,y,z] =[1,2,3];让左边值等于右边值,如果两部个数不匹配,则左边有的值可能为undefined

注意左右格式解构要对应

对于数组形式结构,只要 某种数据结构具有 Iterator接口,可以遍历,就可以数组解构

Let [x=1] = [undefinde]; 左边x=1 表示,如果x为undefined,则去取默认值1

但是x为undefinde 是 x严格等于undefinde 即 x===undefined

上面表达式是 值为x 则去取1的

严格的undefined 是 无定义

Null不是undefined

对象的解构
对象的解构不是按照次序的,,,必须是 变量与 属性同名,才会去取对应的值

Let { bar, foo} = {foo:”aaa”,bar:”bbb”};
上面这种方式,默认 属性名和变量名一致

如果变量名与属性名不一致则需要这样写

Let {foo:f, bar: b} = {foo:”aaa”,bar:”bbb”};

属性名是 foo 变量名是 f

则f的值是 aaa, b的值是 bbb

Let 和 const不允许重新声明,否则会报错

且上面方式 是 声明和 赋值是一体的,所以不允许再在后面进行 let声明对应变量

Let 声明变量后,其下面一行 必须用圆括号括起来

Let foo;
({foo} = {foo:1});

可以嵌套
对象赋值 key value形式 ,通过key 找到 前后 value 进行value赋值,而不是给key赋值

由于js会将 {}理解为一个代码块,所以对于对象的赋值形式,外层必须加 大括号才有效,不报错

Let { log,sin,cos} = Math;将Math对象的 对数 正弦 余弦三个方法,赋值到对应的变量上

字符串的解构赋值

Const [a,b,c,d,e] = ‘hello’;则 a = h,b=e,c = l,d = l, e = o;这是吧字符串看成数组形式赋值

Let {length: len} =’hello’; 则 len = 5,,把字符串看成字符串对象有 length属性,属性值赋给len

即前面的属性,必须是 后面的对象所包含的

等号右边是 数值或者布尔值,则会先转化为 对象
Let {toString : s} = 123; s值为 Number.prototype.toString 是 true

解构规则,,只要等号右边的值不是对象或者数组,就先将其转化为 对象,无法转化为对象的如 undefinde和 null则会解构报错

函数的参数解构

1、正常形式 数组 对象解构 和 上部分一致
如 函数为 function add([x,y]){return x+y}

add([1,2]) 1 2 对应 x y

2、函数参数默认值形式
函数 Function move({x =0,y=0} = {}){ return [x,y]}
Move({x:3,y:8});//这里含义是 传入[3,8]

含义是,传入参数 如果 x为undefinde 则x去取默认值 0,如果y 为undefined 则y去取默认值 0

================================================================

第三点 变量的解构赋值 不能使用圆括号的情况

1、变量声明语句中,不能带有圆括号
如 let[(a)] =[1]; //这个是错误的
2、函数参数中,模式不能带有圆括号
如 function f([(z)]) {return z;}//这个是错误的

3、赋值语句中,不能将整个模式或者嵌套模式中的一层放到圆括号中
({p:a}) = {p:42};//这个是错误的

可以放到圆括号的只有赋值语句中的 非模式部分

[(b)] = [3];//正确 是赋值语句。圆括号不属于模式的一部分
({p:(d)}) ={};//正确, 模式是p,而不是 d,所以d可以放到圆括号中
[(parseInt.prop)] =[3];

变量解构用途
1、交换变量值 [x,y] = [y,x];
2、从函数返回多个值
Function example(){return [1,2,3]} let [a,b,c] = example();

Functon example(){return {foo:1,bar:2};} let {foo,bar} = example();

3、函数参数定义
Function f([x,y,z]) {}’
F([1,2,3]);

Function f({x,y,z}){}; f({z:3,y:2,x:1});

4、提取json数据
Let jsonData ={id:42,status:”OK”,data:[867,5309]};
Let{id,status,data:number} = jsonData; //形式,即是声明又是赋值

5、函数参数 默认值
jQuery.ajax = function(url,{

async =true;
beforeSend = function(){},
cache = true,
complete = function(){},
crossDomain = false,
global = true,

}){
//函数内容

}

6、遍历 Map结构
var map = new Map();
map.set(‘first’,’hello’);
map.set(‘second’,’word’);
for(let [key,value] of map)
{
Console.log(key + “is ” + value);
}

或者只获取键名
for(let [key] of map)
{

}

只获取键值
for(let[,value] of map)
{

}

//
加载模块

const { SourceMapConsumer, SourceNode} = require(“source-map”);

字符串的扩展
1、”\u{待解析字符}” 之前表示是 “\uABCD\uDEFA” 且 \u0000 ~ \uFFFF字符之间

现在可以大于此字符 放在\u中会自动将 “\u{待解析字符}” 解析为 “\u****\u****”

解析字符规则 按照 UTF-16进行解析
所以
Var s =””;上土下口,吉 的异体字
S.length ;//为 2
s.charAt(0);// ‘’ charAt无法读出 为四个字节的字符
s.charAt(1); ‘’
s.charCodeAt(0);// 55362 只能读出前两个字节 值
s.charCodeAt(1);//57271 和 后两个字节

但是上述是 每个都是 四个字节 编码 是 0xD842 0XDFB7
所以 用 codePointAt来进行可以转化

Var s = ‘上土下古字 a’
s.codePointAt(0).toString(16);// 20bb7
s.codePointAt(1);// 52271
s.cidePointAt(2).toString();// ‘61’

codePointAt方法可以字符是 由 两个字节 还是四个字节构成

Function is32Bit(c)
{
Return c.codePointAt(0) > 0xFFFF;
}

is32Bit(“我”);//true
Is32Bit(“a”);//false

2、

String .fromCodePoint()方法

之前es5 String.fromCharCode 不能识别 32位的UTF-16字符,即UNICODE 大于 0xFFFF的

但是 es6 String.fromCodePoint方法可以识别

3、遍历
For(let codePoint of ‘foo’)
{
Console.log(codePoint);
}
// “f”
//”o”
//”o”

Var text = String.fromCodePoint(0x20bb7);

For(let i=0;i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值