这篇讲的是ES5和ES6的区别,都是一些常见的内容,仅供本人学习所用,不定期更新。


1、var 和 const、let
ES5:var存在变量晋升。
ES6:let和const不存在变量晋升。
举荐:应用let和const代替var。

2、for...in 和 for...of
ES5:for...in,循环的是key,手动给对象增加属性后,能够遍历到新属性。
ES6:for...of,循环的是value,手动给对象增加属性后,不能够遍历到新属性。

let a = [11, 22];for(i in a) { console.log(i); } // 0 遍历key// 1for(i of a) { console.log(i); }// 11 遍历value// 22// 增加属性a.a = 333;for(i in a) { console.log(i); } // 0 遍历key// 1// afor(i of a) { console.log(i); }// 11 遍历value// 22

举荐:循环对象属性用for...in(因为对象是无序的);遍历数组用for...of。

3、Number.isFinite(),Number.isNaN()和isFinite(),isNaN()的区别
ES5:isNaN(),isFinite(),这两个办法先调用Number()将非数值的值转为数值,再进行判断。
ES6:Number.isNaN(),Number.isFinite(),这两个办法间接进行判断。

 Number.isFinite()对于非数值一律返回false,Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。
isFinite("25"); // trueNumber.isFinite("25"); // falseisNaN("NaN"); // trueNumber.isNaN("NaN"); // false

4、Number.parseInt(),Number.parseFloat()和parseInt(),parseFloat()
ES5:parseInt(),parseFloat()
ES6:Number.parseInt(),Number.parseFloat()
ES6将全局办法parseInt()和parseFloat(),移植到Number对象下面,行为齐全放弃不变。这样做的目标,是逐渐缩小全局性办法,使得语言逐渐模块化。
举荐:应用Number.parseInt()和Number.parseFloat()代替parseInt()和parseFloat()。