ES6中变量的声明与解析

版权声明:版权声明:本文为博主原创文章,若文章中有错误请联系博主改正,请不要恶意留言(不喜欢请绕道)。欢迎大家转载 https://blog.csdn.net/qq_37674616/article/details/83035718

目录

变量的声明

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

猜你喜欢

转载自blog.csdn.net/qq_37674616/article/details/83035718