1. 程式人生 > >【ES6】const命令和import命令

【ES6】const命令和import命令

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,學習完了,再來總結