Proposal: a more consistent and stricter number converting function - Number.of()
段垚
duanyao at ustc.edu
Fri Feb 24 03:50:29 UTC 2017
Hi,
Converting an arbitray value to a number in JS can be rather
inconsistent and unexpected:
* `null` and `undefined` are different: `+null === 0` but `+undefined`
is NaN.
* Empty string and non-nubmeric strings are different: `+"" === 0` but
`+"foo"` is NaN.
This problem can be worse because JSON only support finite numbers:
```
var total = 0;
total += JSON.parse(JSON.stringify({ "value": 0/0 })).value;
total === 0; //Oops, NaN is serialized as null, and then converted to 0
```
So I propose a more consistent and stricter number converting function:
`Number.of(value)`:
1. If `value` is `null` or `undefined`, return `NaN`;
2. If `value` is a number, return `value` itself;
3. If `value.valueOf()` returns a number, return that number, otherwise
return `NaN`.
This means all non-number values except those have number type
`.valueOf()` would be converted to NaN:
```
Number.of(null); // NaN
Number.of(''); //NaN
Number.of('1'); //NaN
var total = 0;
total += Number.of(JSON.parse(JSON.stringify({ "value": 0/0 })).value);
total; // NaN
```
What do you think?
Regards,
Duan, Yao
More information about the es-discuss
mailing list