1. 程式人生 > >ES6入門一(常見的面試點)

ES6入門一(常見的面試點)

1、變數

在ES6之前,變數宣告關鍵字:var

var的缺點:

    (1)var可以多次宣告同一個變數--在其他程式語言是沒辦法想象的

var a =0;
var a = 99;

(2)var會造成變數提升

(function rr() {
  if(true) {
    var a = 666;
  }
  console.log(a); //輸出666
})()

ES6變數宣告關鍵字:let 變數宣告;const 常量宣告。解決了var前面提到的兩個缺點。

    let以及const都是塊級作用域。

    如何理解塊級作用域

  • 在一個函式內部 function (){}
  • 在一個程式碼塊內部

    常見面試題:


for(var a = 0; a < 3; a++) {
  setTimeout(function() {
    console.log(a);
  }, 1000)
}
//輸出結果都為3

    如何將結果輸出為0, 1, 2

    es5處理方法 -- 用函式製造塊級作用域

for(var a = 0; a < 3; a++) {
  (function (a) {
    setTimeout(function() {
      console.log(a);
    }, 1000)
  })(a)
}
//輸出結果0,1,2

    es6處理方法 -- 更加簡單明瞭

for(let a = 0; a < 3; a++) {
  setTimeout(function() {
    console.log(a);
  }, 1000)
}
//輸出結果為:0,1,2

2、函式 (箭頭函式)

(1)不需要function關鍵字來建立函式

    es5建立函式

var aa = function() {}

    es6建立函式

var aa = () => {}

 (2)可以極大的簡寫函式

    es5函式

var fn = function(a) {
  return a + 5
}

    可以利用箭頭函式簡寫為:

var fn = a => a + 5;

    簡寫規則:

  • 當函式所傳引數只有一個時,可以去掉();        eg: (a) => {}   簡寫為:a => {}
  • 當函式體中只返回值,而沒有其他操作時,可以去掉{};eg: (a, b) => {return a+b} 簡寫為:(a, b) => a+b

(3)繼承上下文的關鍵字this

    es5繼承上下文的關鍵字

var fn = function() {
}
fn.bind(this)

    es6繼承上下文的關鍵字

var fn = () => {}

3、陣列

新增常用的4個方法

(1)map --對映

let arr=[66,59,80];
let result=arr.map(item => {
  if(item >= 60){
    return "及格"
  }else{
    return "不及格"
  }
});
//result:["及格", "不及格", "及格"]

(2)reduce --彙總

let arr = [12,69,180,8763];

let result = arr.reduce((tmp, item, index) => {
   console.log(tmp, item, index);
   return tmp + item;
});
console.log(result);//求和

(3)filter --過濾

let arr=[
    {title: '電源線', price: 50},
    {title: '電腦', price: 13000},
    {title: '鍵盤', price: 120},
    {title: '手機', price: 9000}
];

let result=arr.filter(json=>json.price>=5000);

console.log(result);//[{title: '電腦', price: 13000},{title: '手機', price: 9000}]

(4)forEach --迭代

let arr=[12,5,8,9];

arr.forEach((item,index)=>{
   console.log(index+': '+item); //0: 12  1: 5  2: 8  3: 9
});

4、函式的引數

 (1)收集引數

function show(a, b, ...args){
  console.log(args)
}
show(1,2,3,4,5,6) //輸出[3,4,5,6]

 (2)展開陣列

const arr1 = [1,2,3];
const arr2 = [4,5,6];
console.log([...arr1, ...arr2]); //輸出[1,2,3,4,5,6]
console.log(...arr1); //輸出1,2,3

(3)預設值

const show = (a=666, b=999) => {
  console.log(a); //輸出666
  console.log(b); //輸出999
}

show();

5、解構賦值

  (1)左右兩邊結構必須一樣;

(2)右邊必須是個合法的值;

  (3)宣告和賦值不能分開(必須在一句話裡完成);
let [a,b,c]=[1,2,3,999];
let {e,d,g}={e: 4, d: 5, f: 6, g: 7};
console.log(a,b,c,e,d,g);
//輸出1 2 3 4 5 7

6、字串

(1)多了兩個新方法: startsWith endsWith

//startsWith

let str='https//http://mp.blog.csdn.net/postedit/79478118';

if(str.startsWith('http://')){
  alert('普通網址');
}else if(str.startsWith('https://')){
  alert('加密網址');
}else if(str.startsWith('git://')){
  alert('git地址');
}else if(str.startsWith('svn://')){
  alert('svn地址');
}else{
  alert('其他');
}
//endsWith

let str='12121.png';

if(str.endsWith('.txt')){
  alert('文字檔案');
}else if(str.endsWith('.jpg')){
  alert('JPG圖片');
}else{
  alert('其他');
}

  (2)字串模板

  優點:方便字串拼接;可以折行

let title='標題';
let content='內容';
let str='<div>\
  <h1>'+title+'</h1>\
  <p>'+content+'</p>\
</div>';

let str2=`<div>
  <h1>${title}</h1>
  <p>${content}</p>
</div>`;