ES6中变量的声明与解析

目录

 

变量的声明

var命令

let和const命令

变量的解构赋值

数组的解构赋值

对象的解构赋值

字符串的解构赋值 

数值、boolean的解构赋值


变量的声明

var命令

1. 可以重复声明

var a=10;

var a=12;
console.log(a); //12

2. 变量可以提升

console.log(a); //undefined
var a=10;

3. 没有块级作用域

for(var i=0;i<10;i++){
    console.log(i);
}
console.log('外部i',i); //10

let和const命令

1. 不能在相同作用域内重复声明变量

let a=10;
let a=12;
console.log(a) //报错


//报错
if(true){
    let a=10;
    var a=1;
}

2. 变量不可以提升

console.log(a); //ReferenceError
var a=10;

3. 有块级作用域

for(let i=0;i<10;i++){
    console.log(i);
}
console.log('外部i',i); //undefined

4. 存在暂时性死区

如果区块中存在let和const命令,则这个区块对这些命令的声明的变量从一开始就形成封闭作用域。只要在声明之前使用这些变量,就会报错。

if(true){
   //暂时性死区开始
    tmp="abc";  //ReferenceError
    console.log(tmp); //ReferenceError
   //死区结束
    let tmp;
    console.log(tmp); //undefined

}

 const命令

1.const命令用来声明常量。一旦声明,其值就能改变。这就意味着用cost声明的常量必须要初始化。

const PI=3.14;

PI=3;// TypeError:"PI" is read.only

const a; //SyntaxError

2. const声明的常量只在当前代码块有效。如果要跨模块则采用 模块暴露的方式。

// test1.js
export const A=2;

//index.js

import * as constants from './constants';

console.log(constants.A);

 

变量的解构赋值

数组的解构赋值

let arr=['terry','tom','larry'];
		let a=arr[0];
		let b=arr[1];
		let c=arr[2];

 //等价于下面这种
		
     let [a,b,c]=arr;

let [head,...tail]=[1,2,3,4]; // head=1;tail=[2,3,4]

默认值

    //默认值
 let [a,b,c,d="dd"]=[1,2,3];

console.log(a) //1
console.log(d); //'dd'

案例:交换两个变量的值

//交换两个变量的值
	let a=1;
	let b=2;
	[a,b]=[b,a];

对象的解构赋值

对象的解构是先找到同名属性,然后再赋值给对应的变量。 

var obj={
    name:"cc",
    age:12
}

let {name:a,age:b}=obj;
console.log(a) //"cc";
conoole.log(b) //12

//可以简写如下形式===>

let {name,age}=obj;
console.log(name); //"cc"

指定默认值

默认值生效条件是对象的属性值全等于undefined

var {x=3}={};
x //3

var {x,y=5}={x:1};
x //1
y //5

var {x=3}={x:undefined}
x //3

var {x=3}={x:null}
x //null

字符串的解构赋值 

1. 可以将字符串转换成一个类似数组的对象

let [a,b]="hello";

console.log(a) //'h';

//===>
let [c,d]=['h','e','l','l','o'];

2. 使用String原型中的方法进行解构

let s1="hello";
let {substring:subString}=s1;
subString.call(s1,0,2); // 'he'

数值、boolean的解构赋值

 解析值的时候,如果等号右边是数值或布尔值,则会先转换为对象。

let {toString:s}=123;

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

let {toString:s}=true;

s===Boolean.prototype.toString  //true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值