【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,学习完了,再来总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值