目錄

 

變數的宣告

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