谁知道在 node 下执行这段代码为什么是这个结果?

2017-08-07 14:50:45 +08:00
 song0071000
node 版本 v0.10.28
var a = {"1": 40, "2": 20, "3": -10};
var b = {"1": 20, "2": 10, "3": 1};
for (var i = 0; i < 10000; i++) {
var id = 1;
var score1 = a[3] - b[3];
var score2 = a[1] - b[1];
console.log("score1=" + score1 + " score2=" + score2);
var min = Math.min(score1, score2);
console.log(min);
}

Math.min 比较这个 前面几次循环都是正确的 -11 但是后面若干次输出都是 20

如下:
score1=-11 score2=20
-11
score1=-11 score2=20
-11
score1=-11 score2=20
-11
score1=-11 score2=20
20
score1=-11 score2=20
20
score1=-11 score2=20
20
2404 次点击
所在节点    Node.js
15 条回复
mooncakejs
2017-08-07 14:54:00 +08:00
测试没有 20
yangff
2017-08-07 14:55:08 +08:00
没这个问题
yangff
2017-08-07 14:55:47 +08:00
v6.10.2
zpf124
2017-08-07 15:06:42 +08:00
0.10.28 哥们从哪找的包啊,怕不是活在 IOjs 的时代。
song0071000
2017-08-07 15:07:18 +08:00
@mooncakejs
@yangff

嗯 低版本 node 会有问题 我这是 v0.10.28
某些高版本的没问题。。。
zpf124
2017-08-07 15:10:23 +08:00
一路 -11 from v6.11.1。
zpf124
2017-08-07 15:14:16 +08:00
@song0071000 你这版本低的有些过了, 都 15 年上半年的版本了。 当时 html5 es6 推出才多久。
node 才还是新兴产品,有坑很正常。
learnshare
2017-08-07 15:21:31 +08:00
10.* 都不远了,你搞 0.10
song0071000
2017-08-07 15:30:24 +08:00
嗯啊 自然是由于某些原因才用低版本 node 不然早拥抱新版本了
不过话说低版本的 Math.min 的这个坑 没人踩过吗?有人研究过这到底是啥原因没?

@zpf124
@learnshare
zpf124
2017-08-07 15:46:26 +08:00
@song0071000 也许有人踩,但踩了人家也应该提 issue 在新版本修复了...
不行就自己实现一个 min 的方法。
jianguiqubaa
2017-08-07 18:13:46 +08:00
nodejs v0.10.28 用的 v8 版本是 3.14.5.9
https://nodejs.org/en/download/releases/

v8 升级 log 里面 [2012-09-06: Version 3.13.6 ] 这个段落里是最后一次提到 fix 了 Math.min/max 的 bug 了,所以要不是 nodejs 引入的 v8 有问题, 要不就是 3.13.6 修 bug 的时候又引入了新的 bug
http://upstream.rosalinux.ru/changelogs/v8/3.14.5.8/changelog.html

这种循环多次才出现的问题一般是 JIT 的 bug,16 年的时候还出了一次 typeof 的 bug, 也是 JIT 引发的
https://www.reddit.com/r/javascript/comments/4oxtgk/javascript_developers_be_warned_about_this_crazy/
https://bugs.chromium.org/p/chromium/issues/detail?id=604033

都是很严重的问题, 官方也说 V8 直接把 js 翻译成机器码的做法带了很多代码复杂度。还有我估计这种严重 JIT 的 bug, 就是 v8 换解释器的原因之一 。。。

想解决问题, 升级版本最简单, 附赠成倍性能提升, 而且就我之前经验来说, 当时 nodejs 4.x 的内存占用, 和垃圾回收能力比 0.x 的都好了太多倍了。。。
smallpath
2017-08-07 22:13:43 +08:00
楼主用了魔改的 node ?
song0071000
2017-08-08 11:34:51 +08:00
@jianguiqubaa 嗯 向高版本看齐 我去仔细看看你发的链接
感谢感谢
song0071000
2017-08-08 11:36:27 +08:00
@smallpath ? 没有 就是官方低版本 node
qfdk
2017-08-08 14:11:51 +08:00
好像 min 里面还有个参数 要指定十进制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX