@@ -928,8 +928,17 @@ defaultMethods.if.compile = function (data, buildState) {
928
928
*/
929
929
function numberCoercion ( i , buildState ) {
930
930
if ( Array . isArray ( i ) ) return 'precoerceNumber(NaN)'
931
- if ( typeof i === 'string' || typeof i === 'number' || typeof i === 'boolean' ) return `precoerceNumber(+${ buildString ( i , buildState ) } )`
932
- return `(+precoerceNumber(${ buildString ( i , buildState ) } ))`
931
+
932
+ if ( typeof i === 'number' || typeof i === 'boolean' ) return '+' + buildString ( i , buildState )
933
+ if ( typeof i === 'string' ) return '+' + precoerceNumber ( + i )
934
+
935
+ // check if it's already a number once built
936
+ const f = buildString ( i , buildState )
937
+
938
+ // regex match
939
+ if ( / ^ - ? \d + ( \. \d * ) ? $ / . test ( f ) ) return '+' + f
940
+
941
+ return `(+precoerceNumber(${ f } ))`
933
942
}
934
943
935
944
// @ts -ignore Allow custom attribute
@@ -962,11 +971,11 @@ defaultMethods['/'].compile = function (data, buildState) {
962
971
if ( Array . isArray ( data ) ) {
963
972
return `(${ data . map ( ( i , x ) => {
964
973
let res = numberCoercion ( i , buildState )
965
- if ( x ) res = `(${ res } || (() => { throw new Error(' NaN') })() )`
974
+ if ( x ) res = `precoerceNumber (${ res } || NaN)`
966
975
return res
967
976
} ) . join ( ' / ' ) } )`
968
977
}
969
- return `(${ buildString ( data , buildState ) } ).reduce((a,b) => (+precoerceNumber(a))/(+precoerceNumber(b) || (() => { throw new Error(' NaN') })() ))`
978
+ return `(${ buildString ( data , buildState ) } ).reduce((a,b) => (+precoerceNumber(a))/(+precoerceNumber(b || NaN) ))`
970
979
}
971
980
// @ts -ignore Allow custom attribute
972
981
defaultMethods [ '*' ] . compile = function ( data , buildState ) {
0 commit comments