这篇讲的是 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
// 1
for(i of a) {console.log(i); }
// 11 遍历 value
// 22
// 增加属性
a.a = 333;
for(i in a) {console.log(i); }
// 0 遍历 key
// 1
// a
for(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"); // true
Number.isFinite("25"); // false
isNaN("NaN"); // true
Number.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()。