[英]Math.pow alternative "**" ES7 polyfill for IE11
我正在嘗試評估一個包含冪的表達式,在字符串中為**
。 即eval("(22**3)/12*6+3/2")
。問題是 Internet Explorer 11 無法識別這一點並引發語法錯誤。 我應該使用哪種填充物來克服這個問題? 現在我正在使用Modernizr 2.6.2
。
示例方程是,
((1*2)*((3*(4*5)*(1+3)**(4*5))/((1+3)**(4*5)-1)-1)/6)/7
((1*2)*((3*(4*5)*(1+3)**(4*5))/((1+3)**(4*5)-1)-1)/6)/7*58+2*5
(4*5+4-5.5*5.21+14*36**2+69/0.258+2)/(12+65)
如果無法做到這一點,有哪些可能的替代方案?
您不能 polyfill 運算符 - 只有庫成員(原型、構造函數、屬性)。
由於您的操作僅限於eval
調用,您可以嘗試編寫自己的表達式解析器,但這將是很多工作。
(順便說一句,無論如何你都不應該使用eval
,因為我不會在這篇文章中討論這個很好的理由)。
另一個(hack-ish)選項是使用正則表達式來識別x**y
的瑣碎情況並將它們轉換為Math.pow
:
function detectAndFixTrivialPow( expressionString ) {
var pattern = /(\w+)\*\*(\w+)/i;
var fixed = expressionString.replace( pattern, 'Math.pow($1,$2)' );
return fixed;
}
eval( detectAndFixTrivialPow( "foo**bar" ) );
您可以使用正則表達式將出現的**
替換為Math.pow()
調用:
let expression = "(22**3)/12*6+3/2" let processed = expression.replace(/(\w+)\*\*(\w+)/g, 'Math.pow($1,$2)'); console.log(processed); console.log(eval(processed));
但是,如果您開始使用嵌套或鏈接的冪表達式,事情可能會變得復雜。
我認為您需要對輸入進行一些預處理。 這是我將如何處理這個問題:
您可以在線使用 Babel為 IE 11 轉換 javascript。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.