最近在恶补 JavaScript,对运算符这个地方不太理解

2022-04-12 14:49:42 +08:00
 LxnChan

不是很理解 js 里面的递增的逻辑,这个递增的步长是多少啊

5105 次点击
所在节点    JavaScript
47 条回复
kaiki
2022-04-12 17:32:58 +08:00
尽量只在 for 循环里用++,可以少很多事
DonDonc
2022-04-12 17:43:44 +08:00
ksco
2022-04-12 17:54:02 +08:00
++ 虽然是旧时代的遗产,但在少数场景中还是有用的。

随便举个例子

num = 0
if (condA) { setElem(num++, a) }
if (condB) { setElem(num++, b) }
if (condC) { setElem(num++, c) }

print("added: ", num)

另外在 C 语言中,往前步进指针使用 p++ 也比 p += 1 更加直观。
yangzzzzzz
2022-04-12 17:55:12 +08:00
建议看一下表严肃的 js 精讲 一节几分钟 很快就看完了
galikeoy
2022-04-12 18:19:33 +08:00
@pengtdyd #17 js 不背这个锅。。
xQmQ
2022-04-12 18:43:35 +08:00
插个楼,例如 c 和 c++,用 i++ 和 ++i ,是不是会被编译器优化,然后效率一致?

我以前记得说 i++ 要调个临时变量保存当前值,所以在我 for(;;) 里一直用 ++i
xQmQ
2022-04-12 18:50:31 +08:00
@xQmQ

自个试着汇编了一下看看,for() 里面 i++ 和 ++i 编译出来的汇编代码没有差异
printf("%d\n", i++) 比 printf("%d\n", ++i) 的汇编多一步,估计就是寄存器拿着当前值去打印了,然后再自增

不太懂汇编,也没看太明白
yukinotech
2022-04-12 22:40:13 +08:00
i+=1 多写一个字符不会死的。。
ericgui
2022-04-12 22:50:53 +08:00
我就知道一个 i++
其他的真的用不上
autoxbc
2022-04-12 23:15:32 +08:00
不让用 ++ 就是扯了,应该是不要使用 ++ 操作的返回值

a = i++ ;
// 这是糟粕

some code ...
i++ ;
// 这样毫无问题
lisongeee
2022-04-13 00:00:34 +08:00
eslint no-plusplus: "error"
AllenHua
2022-04-13 00:41:59 +08:00
记得是左右值的问题。

假如 num 初始值是 1

num++ 是先赋值,后自增,把 num++ 当作一个整体,于是 num++ 还是 1 (但是 num 变成了 2)

++num 是先自增,后赋值,于是 ++num 返回了 3 此时 console.log num 的值也是 3
xiangyuecn
2022-04-13 08:18:12 +08:00
js 不背锅,++操作符,绝大部分语言都是相同意义的操作

存在即合理,不可以教唆别人不要用,小心被铐起来
surbomfla
2022-04-13 09:12:47 +08:00
c 语言也是这样啊,难道 op 没学过 c ?
marcong95
2022-04-13 09:23:53 +08:00
楼上黑 JS 的,麻烦黑对点好吗。。。

++i++i++: Thanks for inventing C.
zhw2590582
2022-04-13 10:18:15 +08:00
用 ++ 的话,我记得 eslint 默认会报警告,所以还是不要用好
irytu
2022-04-13 10:22:32 +08:00
你需要补的不是 Javascript…
yazinnnn
2022-04-13 10:25:59 +08:00
不要写语义模糊,让人困惑的代码

一个表达式既赋值又读值,本来就是迷惑行为

建议使用+=,或者把代码拆成两行

println(i++) =>

i++
println(i)
libook
2022-04-13 10:36:49 +08:00
1. JS 是个历史非常长的语言了,语言特性受一些同样历史非常长的其他语言影响,同时又产生了一些历史包袱;比如 C 和 Java 也都有相同的自增自减特性,计算机专业大多会首先学 C ,自增自减放左边放右边不一样的这个特性也是一个比较重要的知识点。
2. 一个人对一个知识了解越少就会越通过主观感受去评判,了解越多就越尊重客观事实;语言没有好不好,只有适合不适合、习惯不习惯。
3. JS 是一们特别灵活的语言,灵活的代价就是对开发者要求很高,开发者得思考运行结果、异常风险,以及要在众多实现方案里选出一种最合适的;也存在着一些语言写出来的代码千人一面,但同时也损失了灵活性。
4. MDN 上关于 JS 的资料非常全,比如自增运算符的: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Increment ;建议不管是 JS 新手还是老手都仔细看一遍 MDN 上关于 JS 的文档,即便大多内容都已经了解,边边角角的地方往往会给你一些惊喜。
5. 团队协作写代码的话,风格标注和文档 /注释都很重要,因为代码主要是用来给别人看的,其次才是用来运行的,可以结合团队成员的平均水平,来规定哪些写法可以用哪些不可以用,然后大家一起遵守就好了。
AllenHua
2022-04-13 10:37:23 +08:00
有些人难免有一些误解。为什么 i++ 就不能用了。

还有这和 JavaScript 关系也不大,多数编程语言都这样,大家都这么约定俗成的。

另外 for 循环里使用 i++ 或者 ++i 没有任何区别。不明白的看 #32 给一个知乎的讨论链接: https://www.zhihu.com/question/19811087

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

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

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

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

© 2021 V2EX