ES5中經過改變屬性描述符來達到常量的效果,咱們能夠將屬性定義爲只讀。
Object.defineProperty(window,'PI',{ value:'3.14', writable:false })
使用const定義數組
const PI = 3;
數組是複合的數據類型,若直接複製,只是複製了指向底層數據結構的指針,而不是克隆一個全新的數組。數據結構
var arr = [1,2]; var arr2 = arr; arr2[0] = 90; console.log(arr); //[90,2] console.log(arr2) //[90,2]
因此在ES5中,只能變通用concat方法複製指針
var arr = [1,2]; var arr2 = arr.concat(); arr2[0] = 10; console.log(arr); //[1,2] console.log(arr2); //[10,2]
對象中的擴展運算符能夠這樣理解:對象中的擴展運算符(...)用於取出參數對象中全部可遍歷的屬性,拷貝到當前對象中。
let arr = [1,2,3]; let arr2 = [...arr]; // [1,2,3]
假如給拷貝arr2時push一個元素:code
let arr2 = [...arr,5]; console.log(arr2); //[1,2,3,5] console.log(arr); //[1,2,3]
能夠看到只會改變arr2的值,而不會影響arr的值。一樣改變arr的值也不會影響到arr2的值。對象
arr.push(12); console.log(arr); //[1,2,3,12] console.log(arr2); //[1,2,3,5]
因此,上述方法實際上等價於:it
let arr = [1,2,3]; let arr2 = Object.assign([],arr); console.log(arr2); //[1,2,3] arr2.push(12); console.log(arr2); //[1,2,3,12] console.log(arr); //[1,2,3]
Object.assign方法用於對象的合併,將源對象全部的可枚舉屬性複製到目標對象。
注:Object.assign和擴展運算符(...),對一級屬於屬於深拷貝,對後面對級別屬於淺拷貝。console