Company logo
  • Jobs
  • Bootcamp
  • About Us
  • For professionals
    • Home
    • Jobs
    • Courses
    • Questions
    • Teachers
    • Bootcamp
  • For business
    • Home
    • Our process
    • Plans
    • Assessments
    • Payroll
    • Blog
    • Calculator

0

51
Views
Why `+0n` throws an error but `-0n` does not?

The following code throws an error in javascript:

console.log(String(+0n))

But this code runs successfully:

console.log(String(-0n))

Why +0n throws an error but -0n does not?

7 months ago · Juan Pablo Isaza
2 answers
Answer question

0

So that it doesn't break asm.js:

  • Unary + followed by an expression is always either a Number, or results in throwing. For this reason, unfortunately, + on a BigInt needs to throw, rather than being symmetrical with + on Number: Otherwise, previously "type-declared" asm.js code would now be polymorphic.

As Bergi highlights in the comments, this was the least bad of three options:

  1. +BigInt -> BigInt: breaks asm.js, and anything else that made the assumption "unary plus gives a Number";
  2. +BigInt -> Number: conflicts with the design decision to disallow implicit conversions between Number and BigInt; or
  3. +BigInt -> error.
7 months ago · Juan Pablo Isaza Report

0

+0n is treated as +(BigInt(0)), since unary + means "cast to integer", and it can't automatically do that (for some reason)

console.log(+(BigInt(0)));

-0n is treated as BigInt(-0), since negative numbers can be big integers

(You need to check your console for this, since I guess there's a bug in the StackSnippets preventing BigInts from being casted to a string in the console.log call)

console.log(BigInt(-0));

7 months ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post job Plans Our process Sales
Legal
Terms and conditions Privacy policy
© 2023 PeakU Inc. All Rights Reserved.