let 取代 var。ES6新增加了两个新的变量声明关键字 let 和 const,而其中的 let完全可以取代 var,两者语义相同且 let 更适合作为块级作用域关键字。
example:
1.// var
console.log(str); // undefined if (true) { var str = 'ES6'; } console.log(str); // 'ES6'
// 这里的 str实际相当于声明了一个模块内的全局变量,只要是当前模块内就都可以访问。就像上面 console.log,虽然显示的是 undefined,但也只是相当于说未初始化,而不是未定义(Uncaught ReferenceError: a is not defined)。
//
这违反了 变量先声明后使用的原则!!!!!
for (var i = 0; i < 10; i++) { console.log(i); } console.log(i); // 10 这里的 i跟上面的 str一样,声明变量的时候被提升了到了模块的最顶部
2.// let if (true) { console.log(strs); // Uncaught ReferenceError: Cannot access 'strs' before initialization let strs = 'ES6'; } console.log(strs); // Uncaught ReferenceError: strs is not defined // var关键字带有变量作用域提升作用,而 let关键字则不存在这个问题,变量作用域被限制的死死的。 for (let i = 0; i < 10; i++) { console.log(i); } console.log(i); // Uncaught ReferenceError: i is not defined
3、全局常量。在定义全局常量时,应优先使用 const关键字,而不是在模块的最顶部采用let或var 声明变量充做全局常量。尤其是在全局环境中,只应设置常量,而不应声明变量以充常量。
// const 优于 let、var有以下几个原因: // 一、const可以提醒代码阅读者,该参数是一个常量,不能随意修改,修改该参数存在一定的风险; // 二、const比较符合函数式编程思想,运算不改变值,只是新建值,而且有利于将来的分布式运算; // 三、JS编译器会对 const进行优化,有利于提高代码的执行效率,所以可以多用 const。而且 let和 const的本质区别就是编译器内部的处理不同。 const a = 1, b = 2, c = 3,d = 4; // 所有的函数都应该设置为常量 const TempFunc = function () { console.log('所有的函数都应该设置为常量!'); };
对象 1.单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。
example:
const a = {aa: 123, bb: '123'}; const b = { bb: 234, cc: '234', };
2.对象尽量静态化,一旦定义,就不得随意添加新的属性。如果实在需要添加新属性,可以使用 Object.assign方法追加。如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。
const a = {aa: 123}; a.aa = 1234; console.log(a); // {aa: 1234} // 如果必须要添加属性 Object.assign(a, {bb: '123'}); console.log(a); // {aa: 1234, bb: "123"}