【ES6】const命令和import命令
阿新 • • 發佈:2019-01-08
const命令
const用來宣告常量,一旦宣告,其值就不能更改,這就意味著const一旦宣告常量,就要立即初始化。
const命令的作用域與let命令相同:
- 只在宣告所在的塊級作用域內有效。
- const命令宣告的常量也不提升。
- 同樣存在暫死區,只能在聲明後使用。
對於複合型的變數,變數名不指向資料,而指向資料所在的地址。const命令只需保證變數名指向的地址不變,並不保證該地址的資料不變
const foo={};
foo.prop=123;
foo.prop;//123
foo={};//報錯
//const命令定義的常量,不可變的只是這個地址,既不能把foo指向另一個地址,但物件本身是可變的,所以依然可以為其新增新屬性。
const a=[];
a.push("hello");//可執行
a.length=0;//可執行
a=["demo"];//不可執行
如果想凍結物件,應該使用Object.freeze方法。
const foo =Obiect.freeze({});
foo.prop=123;//不起作用
如果想把物件屬性凍結,下例是將物件徹底凍結的函式
var constantize =(obj)=>{
Object.freeze(obj);
Object.keys(obj).forEach((key,value))=>{
if(typeof obj[key]==='object' ){
constantize(obj[key]);
}
}
}
跨模組常量
const命令只能聲明當前程式碼塊內的常量,如果想設定跨模組常量:
//test1.js
export const sa='abc';
export const ss='hello';
//test2.js
import * from './test1.js';
console.log(sa);//abc
console.log(ss);//hello
全域性物件的屬性
瀏覽器環境下的全域性物件指window物件,Node.js內指的是global物件。
- ES5中全域性物件的屬性與全域性變數是等價的。
window.a=1;
a //1
- node.js中,模組環境下,全域性變數必須顯式宣告為global物件的屬性。
- ES6中規定:var命令和function命令宣告的全域性變數依舊是全域性物件的屬性;let命令、const命令和class命令宣告的全域性變數不屬於全域性物件的屬性。
var a=1;
window.a;//1
let b=1;
window.b;//undefined
import命令
import命令用於載入由export命令定義的模組的對外介面。
import命令接受一個物件(用大括號表示),裡面指定要從其他模組匯入的變數名。大括號中的變數名必須與被匯入模組對外介面名稱相同。
import {firstName,lastName,year} from './test';
function setName(el){
e.textContent=firstName+' '+lastName;
}
//使用as關鍵字,將變數重新命名
import {firstName as name} from './test';
//import命令具有提升效果
foo();
import {foo} from './test';
到這裡,ES6中宣告變數的方法僅剩下class,學習完了,再來總結