最近在恶补 JavaScript,对运算符这个地方不太理解
source link: https://www.v2ex.com/t/846528
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
不是很理解 js 里面的递增的逻辑,这个递增的步长是多少啊
kop1989smurf 20 小时 43 分钟前
首先,这并不是 JS 的知识。
x++是先附值再累加。
++x 是先累加再附值。
gdrk 20 小时 41 分钟前 1
kop1989smurf 20 小时 40 分钟前
输出 num3;
num3 = num3 + 1;
LxnChan 20 小时 40 分钟前
wangtian2020 20 小时 34 分钟前
i++
console.log(i)
和
let i=0
++i
console.log(i)
的运算结果是一样的。
通常都是这种写法。
把 变量++ 写在表达式里的意义一般就是为了炫酷,自己写代码的时候,如果不知道代码的运行结果是什么,那么最好就不要这么写。
运算符 ++ 和 -- 可以置于变量前,也可以置于变量后。
当运算符置于变量后,被称为“后置形式”:counter++。
当运算符置于变量前,被称为“前置形式”:++counter 。
两者都做同一件事:将变量 counter 与 1 相加。
https://zh.javascript.info/operators
ChefIsAwesome 20 小时 31 分钟前
agdhole 20 小时 30 分钟前
shintendo 20 小时 20 分钟前 1
Leviathann 20 小时 19 分钟前
weixiangzhe 19 小时 50 分钟前
i += 1 清晰明了
gogogo1203 18 小时 47 分钟前
hazardous 18 小时 40 分钟前
其实这个不算奇淫巧计了,行为结果是固定的,我觉得写代码时可以用。
要避免的是 "func(a++, ++a)" 这种
pengtdyd 18 小时 38 分钟前
deplivesb 18 小时 28 分钟前
NCry 18 小时 5 分钟前
kaiki 18 小时 3 分钟前
ksco 17 小时 41 分钟前
随便举个例子
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 17 小时 40 分钟前
xQmQ 16 小时 52 分钟前
我以前记得说 i++ 要调个临时变量保存当前值,所以在我 for(;;) 里一直用 ++i
xQmQ 16 小时 45 分钟前
自个试着汇编了一下看看,for() 里面 i++ 和 ++i 编译出来的汇编代码没有差异
printf("%d\n", i++) 比 printf("%d\n", ++i) 的汇编多一步,估计就是寄存器拿着当前值去打印了,然后再自增
不太懂汇编,也没看太明白
yukinotech 12 小时 55 分钟前
ericgui 12 小时 45 分钟前
其他的真的用不上
autoxbc 12 小时 20 分钟前
a = i++ ;
// 这是糟粕
some code ...
i++ ;
// 这样毫无问题
lisongeee 11 小时 35 分钟前
AllenHua 10 小时 54 分钟前 via iPhone
假如 num 初始值是 1
num++ 是先赋值,后自增,把 num++ 当作一个整体,于是 num++ 还是 1 (但是 num 变成了 2)
++num 是先自增,后赋值,于是 ++num 返回了 3 此时 console.log num 的值也是 3
xiangyuecn 3 小时 17 分钟前
存在即合理,不可以教唆别人不要用,小心被铐起来
surbomfla 2 小时 23 分钟前
marcong95 2 小时 12 分钟前
++i++i++: Thanks for inventing C.
zhw2590582 1 小时 17 分钟前
irytu 1 小时 13 分钟前 via iPhone
yazinnnn 1 小时 10 分钟前
一个表达式既赋值又读值,本来就是迷惑行为
建议使用+=,或者把代码拆成两行
println(i++) =>
i++
println(i)
libook 59 分钟前
2. 一个人对一个知识了解越少就会越通过主观感受去评判,了解越多就越尊重客观事实;语言没有好不好,只有适合不适合、习惯不习惯。
3. JS 是一们特别灵活的语言,灵活的代价就是对开发者要求很高,开发者得思考运行结果、异常风险,以及要在众多实现方案里选出一种最合适的;也存在着一些语言写出来的代码千人一面,但同时也损失了灵活性。
4. MDN 上关于 JS 的资料非常全,比如自增运算符的: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Increment ;建议不管是 JS 新手还是老手都仔细看一遍 MDN 上关于 JS 的文档,即便大多内容都已经了解,边边角角的地方往往会给你一些惊喜。
5. 团队协作写代码的话,风格标注和文档 /注释都很重要,因为代码主要是用来给别人看的,其次才是用来运行的,可以结合团队成员的平均水平,来规定哪些写法可以用哪些不可以用,然后大家一起遵守就好了。
AllenHua 58 分钟前
还有这和 JavaScript 关系也不大,多数编程语言都这样,大家都这么约定俗成的。
另外 for 循环里使用 i++ 或者 ++i 没有任何区别。不明白的看 #32 给一个知乎的讨论链接: https://www.zhihu.com/question/19811087
Mexion 54 分钟前
msg7086 54 分钟前
之前用 SIMD intrinsics 写了个算法,拿各种编译器编译完以后,clang llvm 跑出来的程序比 msvc 和 gcc 的快了很多,回头看了一眼,clang 嫌弃我写的 SIMD 烂,帮我整个重写了。
cpstar 45 分钟前
就那个 i++和++i ,正经学过 C 语言的,都经历过这个事情吧
哈哈哈,所谓科班出身,大抵如此。(不带嘲笑之意,不要多想,手动狗头)
qping 42 分钟前
cpstar 38 分钟前
当年在 PHP 上把需要四五行甚至一个 func 的事情硬写到了一行里。作为 JS ,诸如 if (x!=null) x=y else x={} 也可以直接 x=y||{} 完活。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK