polyfill
这个单词表示根据新特性的定义,创建一段与之等价但能在旧的js环境中运行的代码。
举例来说,ES6定义了一个名为Number.isNaN(..) 的工具,用于提供一个精准无bug的NaN值检查,取代原来的isNaN(..)
if(!Number.isNaN) { //如果Number没有isNaN的话,那么下面就会进行Number.isNaN的定义
Number.isNaN = function isNaN(x) {
return x !== x;
};
}
NaN是整个语言中唯一一个和自己不相等的值
transpiling
语言中新增的语法是无法进行polyfilling的。新语法在旧版的js引擎上会抛出未识别和无效错误。
一下是一个简单的transpiling实例,ES6新增了一个名为"默认参数值"的新特性
function foo(a = 2) {
console.log( a );
}
foo();
foo( 42 );
这个新语法在ES6之前的引擎中是无效的,transpiler代码如下,
function foo() {
var a = (arguments[0] !== (void 0)) ? arguments[0] : 2;// arguments[0]是第一个参数,如果
//不是undefined的话,那么a的值是arguments[0],如果没有参数的话就是默认值2
console.log( a );
}
非常好用的Babel就是一种transpiler,它支持把ES6+的语法转换为Es5语法