Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ecmascript 6 使用Object.assign()指定一个数字会导致对象引用未定义_Ecmascript 6_Javascript Objects_Assign - Fatal编程技术网

Ecmascript 6 使用Object.assign()指定一个数字会导致对象引用未定义

Ecmascript 6 使用Object.assign()指定一个数字会导致对象引用未定义,ecmascript-6,javascript-objects,assign,Ecmascript 6,Javascript Objects,Assign,我很抱歉这里包含的代码太多,但我想透露一切。无论我尝试什么,我都无法获得Object.assign()来为给定的键分配一个整数,尽管在下一行分配一个浮点数时同样的操作非常有效 此代码包含所有需要的引用,因此很笨重(我的调试工具包的一部分): 现在我明白了为什么第二个值是NaN(因为在第二次运行timeEnd()时,“mark.s”键存在,但是它引用了undefined,对undef执行任何算术都会导致NaN) 我不明白的是,当seconds是一个确认为数字的简单无符号整数时,为什么在第一次运行t

我很抱歉这里包含的代码太多,但我想透露一切。无论我尝试什么,我都无法获得
Object.assign()
来为给定的键分配一个整数,尽管在下一行分配一个浮点数时同样的操作非常有效

此代码包含所有需要的引用,因此很笨重(我的调试工具包的一部分):

现在我明白了为什么第二个值是NaN(因为在第二次运行
timeEnd()
时,“mark.s”键存在,但是它引用了
undefined
,对undef执行任何算术都会导致
NaN

我不明白的是,当
seconds
是一个确认为数字的简单无符号整数时,为什么在第一次运行
timeEnd()
时没有正确分配此值。更奇怪的是,正如我们从毫秒输出中所看到的,这个完全相同的操作对于浮点数来说效果很好。。。虽然他们在技术上都是

累计值的默认值更改为false,秒数将按预期输出和显示,因此我95%确定在
对象.assign()
部分中发生了什么


一旦它符合条件肯定会给它一笔赏金。。。期待了解地球上正在发生的事情

这与双精度与整数无关。只是你的代码

这显然不起作用,用
ms
属性覆盖
s
属性的对象。请记住,
Object.assign
不会递归合并

你真正想要的是

if (mark) {
    mark.s += seconds;
    mark.ms += milliSeconds;
} else {
    cumulativeTimes[marker] = {
        s: seconds,
        ms: milliSeconds
    };
}

嗯,还有?这根本不是承诺的工作方式。如果
marker
是字符串,不要将
markers
设置为数组。使用对象或映射。调试文件甚至不能进入repo,更不用说生产文件了,我的朋友;)里面满是古怪的东西。不用担心-你发现了对象覆盖-谢谢!我在那个洞里钻得太深了。这就解决了,谢谢
Seconds is 2 with type number
undefineds, 993.351ms -- someLongOp
Seconds is 3 with type number
NaNs, 1476.091ms -- someLongOp
mark ? mark.s += seconds : Object.assign(cumulativeTimes, { [marker]: { s: seconds } } ) // <-- It's a trap!
mark ? mark.ms += milliSeconds : Object.assign(cumulativeTimes, { [marker]: { ms: milliSeconds } } )
if (mark)
   mark.s += seconds;
else
   cumulativeTimes[marker] = { s: seconds };
if (mark)
   mark.ms += milliSeconds;
else
   cumulativeTimes[marker] = { ms: milliSeconds };
if (mark) {
    mark.s += seconds;
    mark.ms += milliSeconds;
} else {
    cumulativeTimes[marker] = {
        s: seconds,
        ms: milliSeconds
    };
}