Polyfill你能夠理解爲「膩子」,就是裝修的時候,能夠把缺損的地方填充抹平。html
舉個例子,html5的storage(session,local), 不一樣瀏覽器,不一樣版本,有些支持,有些不支持。前端
咱們又想使用這個特性,怎麼辦?html5
有些人就寫對應的Polyfill(Polyfill有不少),幫你把這些差別化抹平,不支持的變得支持了(簡單來說,寫些代碼判斷當前瀏覽器有沒有這個功能,沒有的話,就寫一些支持的補丁代碼)。git
你只須要把須要的Polyfill引入到你的程序裏,就能夠了。github
好比下面就是對html5各個特性支持的Polyfill,你須要哪一個,就引入哪一個。固然,你也能夠本身寫 :) https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills瀏覽器
舉個例子,有些舊瀏覽器不支持Number.isNaN方法,Polyfill就能夠是這樣的:session
if(!Number.isNaN) { Number.isNaN = function(num) { return(num !== num); } } 啥意思呢,就是假如瀏覽器沒有Number.isNaN方法,那我們就給它添加上去,所謂Polyfill就是這樣解決API的兼容問題的。es5
shim和polyfill有什麼區別 在JavaScript的世界裏,有兩個詞常常被提到,shim和polyfill.它們指的都是什麼,又有什麼區別? 一個shim是一個庫,它將一個新的API引入到一箇舊的環境中,並且僅靠舊環境中已有的手段實現 一個polyfill就是一個用在瀏覽器API上的shim.咱們一般的作法是先檢查當前瀏覽器是否支持某個API,若是不支持的話就加載對應的polyfill.而後新舊瀏覽器就均可以使用這個API了.術語polyfill來自於一個家裝產品Polyfilla:htm
Polyfilla是一個英國產品,在美國稱之爲Spackling Paste(譯者注:刮牆的,在中國稱爲膩子).記住這一點就行:把舊的瀏覽器想象成爲一面有了裂縫的牆.這些[polyfills]會幫助咱們把這面牆的裂縫抹平,還咱們一個更好的光滑的牆壁(瀏覽器) Paul Irish發佈過一個Polyfills的總結頁面「HTML5 Cross Browser Polyfills」.es5-shim是一個shim(而不是polyfill)的例子,它在ECMAScript 3的引擎上實現了ECMAScript 5的新特性,並且在Node.js上和在瀏覽器上有徹底相同的表現(譯者注:由於它能在Node.js上使用,不光瀏覽器上,因此它不是polyfill).ip
前端真是萬年坑。。。