From be78c15dcc408b80284afad7648b736fdb551509 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 12 Nov 2015 23:12:07 -0800 Subject: [PATCH] [Fix] `Number`: Make sure string values are trimmed before attempting to parse. --- es6-shim.js | 3 +-- test/number.js | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/es6-shim.js b/es6-shim.js index d1d052fe..ae10e83d 100644 --- a/es6-shim.js +++ b/es6-shim.js @@ -1179,14 +1179,13 @@ var NumberShim = function Number(value) { var primValue = Type.primitive(value) ? value : toPrimitive(value, 'number'); if (typeof primValue === 'string') { + primValue = _call(trimShim, primValue); if (isBinary(primValue)) { primValue = parseInt(_strSlice(primValue, 2), 2); } else if (isOctal(primValue)) { primValue = parseInt(_strSlice(primValue, 2), 8); } else if (hasNonWS(primValue) || isBadHex(primValue)) { primValue = NaN; - } else { - primValue = _call(trimShim, primValue); } } var receiver = this; diff --git a/test/number.js b/test/number.js index c6276f13..7b7fa204 100644 --- a/test/number.js +++ b/test/number.js @@ -380,8 +380,17 @@ describe('Number', function () { it('works with binary literals in string form', function () { expect(Number('0b1')).to.equal(1); + expect(Number(' 0b1')).to.equal(1); + expect(Number('0b1 ')).to.equal(1); + expect(Number('0b10')).to.equal(2); + expect(Number(' 0b10')).to.equal(2); + expect(Number('0b10 ')).to.equal(2); + expect(Number('0b11')).to.equal(3); + expect(Number(' 0b11')).to.equal(3); + expect(Number('0b11 ')).to.equal(3); + expect(Number({ toString: function () { return '0b100'; }, valueOf: function () { return '0b101'; } })).to.equal(5); });