@@ -928,8 +928,17 @@ defaultMethods.if.compile = function (data, buildState) {
928928 */
929929function numberCoercion ( i , buildState ) {
930930 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 } ))`
933942}
934943
935944// @ts -ignore Allow custom attribute
@@ -962,11 +971,11 @@ defaultMethods['/'].compile = function (data, buildState) {
962971 if ( Array . isArray ( data ) ) {
963972 return `(${ data . map ( ( i , x ) => {
964973 let res = numberCoercion ( i , buildState )
965- if ( x ) res = `(${ res } || (() => { throw new Error(' NaN') })() )`
974+ if ( x ) res = `precoerceNumber (${ res } || NaN)`
966975 return res
967976 } ) . join ( ' / ' ) } )`
968977 }
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) ))`
970979}
971980// @ts -ignore Allow custom attribute
972981defaultMethods [ '*' ] . compile = function ( data , buildState ) {
0 commit comments