(1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍
1.let声明变量,var声明变量,而const声明的常量
2.let与var的区别
let可以让变量长期驻扎在内存当作
let的作用域是分块【 {快1 {快2 } }每个大括号表示一个独立的块 】的,块内的变量不会覆盖块外的变量值。
{
//(模)块1
let a = 1;
if(true){
//(模)块2
let a = 2;
}
console.log(a); //1,因为块内的变量不会覆盖块外的变量值
}
let与var:同一个代码块里面不能出现变量重复声明
3.const声明常量,常量的值一旦声明就整体就不能被改变,如果一个空数组或者json的话还是可以向他们里面添加成员,但可以通过【彻底冻结函数】来禁止添加成员。
const的作用域也是分块的,const与let共同点:同一个代码块里面不能出现变量重复声明
const PI = 3.1415926; //声明常量
const对象声明后可以进行属性附值操作,但是不能重新对整个对象赋值操作【例如const json = {},json={name:'hao123'}】。
4.const对象冻结
//冻结1 const person = Object.freeze();//冻结 person.name = "zhangsan"; person.age = 30; console.log(person.age);//30 //冻结2 const person = Object.freeze({});//冻结 person.name = "zhangsan"; person.age = 30; console.log(person.age); //undefined //冻结3 const person = Ojbect.freeze({//冻结 name:"张三", age:30; }); console.log(person.age);//30
5.forEach用法
/** * forEach的用法,遍历一个对象 * forEach(testfun[,thisobj]); */ var arr = [1,2,3,4]; //写法1 arr.forEach(t1,arr); function t1(arg) { alert(arg); } //写法2 arr.forEach(function (e) { alert(e); });
6.彻底冻结对象的函数
/** * 利用forEach来实现ES6彻底冻结对象的函数 * @param {[type]} obj [description] * @return {[type]} [description] */ /*ES6写法*/ var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key,value) => { if( typeof obj[key] === 'object' ) { constantize( obj[key] ); } }); }; /*ES5写法*/ var contantize = function (obj) { Object.freeze(obj); Object.keys(obj).forEach(function (key,value) { if( typeof obj[key] === 'object' ) { constantize ( obj[key] ); } }); }
7.跨模块常量的使用
//module.js文件的代码 export const myjson = { varInt: 100, varFloat: 11.02, varString: 'abc' } //use.js import * as myjson form './module'; //导入module.js内接口对象myjson的全部成员,.js可以省略 console.log(myjson.varInt); //100 console.log(myjson.varFloat); //11.02 console.log(myjson.varString); //'abc' //otherUse.js import {myjson.varInt,myjson.varFloat} as myjson form './module'; console.log(myjson.varInt); console.log(myjson.varFloat); //onlyInt.js import myjson.varInt as myjson form './module'; console.log( myjson.varInt );
8.全局对象属性
全局对象属性,在浏览器环境指的是window对象,而Nodejs指的是global对象。 在javascript语言中,所有的全局对象,所有的全局变量都是全局对象属性。如果var与function命令声明的变量是全局变量那么就属于全局对象属性。 var myName = 'jewave'; console.log(window.myName);//浏览器环境下的全局变量 console.log(global.myName);//Node环境下的全局变量 console.log(this.myName);//通用环境下的全局变量 let herName = "hong"; console.log(window.herName); //undefined