这篇讲的是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()。
发表回复