Unable to reassign negative zero object property to positive zero

  • Version: v12.2.0
  • Platform: Darwin Kernel Version 18.5.0: Mon Mar 11 20:40:32 PDT 2019; root:xnu-4903.251.3~3/RELEASE_X86_64 x86_64

Some object properties cannot be assigned to 0 if they currently have a value of -0, without being first set to a non-zero value.

const duration = {
	years: -0,
	months: -0,
	weeks: -0,
	days: -0,
	hours: -0,
	minutes: -0,
	seconds: -0,
	milliseconds: -0
};

Object.keys(duration).forEach(key => {
	duration[key] = 0;
});

console.log(duration);
/* ✅ For node v11.11.0, all values on `duration` are logged as positive 0.
 * ❌ For node v12.2.0, the logged output is consistently as follows:
 * {
 *   years: 0,
 *   months: 0,
 *   weeks: 0,
 *   days: -0,
 *   hours: -0,
 *   minutes: -0,
 *   seconds: -0,
 *   milliseconds: -0
 * }
 */

// Expected behaviour can be achieved by changing the value to a non-zero value first:
Object.keys(duration).forEach(key => {
	duration[key] = 1;
	duration[key] = 0;
});

console.log(duration);
// ✅ Correct for both v11.11.0 and v12.2.0