Web前端面試題及答案——ES6

1、let、const和var的區別

let用於聲明變量,const聲明常量。const聲明常量時,必須在聲明的同時賦值;對普通常量聲明後不能再修改;對引用類型的常量,指向對象存儲地址的指針,可以修改其中的內容。

let和const不存在變量提升、重複聲明變量、使用未經聲明的變量(ES6強制開啓嚴格模式)都會報錯。var有變量提升、可以重複聲明變量。

console.log(i); // undefined
var i=1;
console.log(j); // Uncaught ReferenceError: j is not defined
let j=2;
function func(){
  let b=100;
  var b=10;
}
func(); // Uncaught SyntaxError: Identifier 'b' has already been declared

function add(num){
  let num;
}
add(); // Uncaught SyntaxError: Identifier 'num' has already been declared

 let和const只在塊作用域中有效。 

// ES5
var a=[];
for(var i=0;i<10;i++){
    a[i]=function(){
      console.log(i);
    };
}
a[6](); // 10

var a=[];
for(var i=0;i<10;i++){
    a[i]=(function(i){
      return function(){
        console.log(i);
      }
    })(i);
}
a[6](); // 6

// ES6
var a=[];
for(let i=0;i<10;i++){
    a[i]=function(){
      console.log(i);
    };
}
a[6](); // 6

2、聲明變量的方式

ES5:var a;     var b=1;    function add(a){}

ES6:let a;    let b=1;    const b=1;    class Point{}    import { foo } from 'my_module';

2、Object.assign()函數的作用及用法,舉例說明

Object.assign方法用於對象的合併,將源對象的所有可枚舉屬性,複製到目標對象。第一個參數是目標對象,後面的參數都是源對象。如果目標對象與源對象或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。

如果只有一個參數,Object.assign會直接返回該參數。如果該參數不是對象,則會先轉成對象,然後返回。由於undefined和null無法轉成對象,所以如果它們作爲參數,就會報錯。

如果非對象參數非首參數,那麼處理規則有所不同。這些參數都會轉成對象,如果無法轉成對象,就會跳過。這意味着,如果undefined和null不在首參數,就不會報錯。數值、字符串和布爾值,除了字符串會以數組形式,拷貝入目標對象,其它值都不會產生效果。

只拷貝源對象的自身屬性,不拷貝繼承屬性,也不拷貝不可枚舉的屬性。

淺拷貝,而不是深拷貝,如果源對象某個屬性的值是對象,那麼目標對象拷貝得到的是這個對象的引用。

只能進行值的複製,如果要複製的值是一個取值函數,那麼將求值後再複製。
 

深拷貝和淺拷貝

3、函數聲明

const add=(a,b)=>{return a+b} // ES6
const add=(a,b)=>a+b // ES6
function add(a,b){return a+b;}
const add=function(a,b){return a+b};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章