84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
今天看一个js教程,讲师使用了类似var a = 20/3|1;这种除法,说是是Math.floor的简写,但我测试结果不是这样。
var a = 20/3|1;
var a = 20/3 | 1; //a是7
var a = Math.floor(20/3); //a是6
那到底|1起的作用是什么呢?
走同样的路,发现不同的人生
实名反对楼上答案,完全未经测试。不信可以测试下:
console.log(3.999 | 1)
难道会等于4吗?
实际上这是继承自c语言的或操作,或1,就是把最低位置为1,实际上的意义在于把这个数变为一个奇数,如果是偶数则+1,如果是奇数则返回本身,在这里,javascript解释器会判断如果不是整数则取整,因为或操作对于小数无意义。
或
同理为最低位或0则代表无意义的操作,因为任何数或0都等于其本身,但是由于javascipt解释器已经帮我们取整过了,所以直接返回整数本身,意义在于取整。
对于本题,要么你记错了,要么就是老师不专业,n|0 = Math.floor(n),|0才是Math.floor。
n|0 = Math.floor(n)
|0
Math.floor
感谢@rozbo 的指正。20 / 3 = 6.6666666666666676.666666666666667 | 1 = 76.666666666666667 | 0 = 6
如@rozbo所说的3.99 | 1 = 3。| 0 或 | 1 都有取整的作用。但用Math.ceil和Math.floor,代码可读性更高。
实名反对楼上答案,完全未经测试。不信可以测试下:
难道会等于4吗?
实际上这是继承自c语言的
或
操作,或1,就是把最低位置为1,实际上的意义在于把这个数变为一个奇数,如果是偶数则+1,如果是奇数则返回本身,在这里,javascript解释器会判断如果不是整数则取整,因为或操作对于小数无意义。同理为最低位或0则代表无意义的操作,因为任何数或0都等于其本身,但是由于javascipt解释器已经帮我们取整过了,所以直接返回整数本身,意义在于取整。
对于本题,要么你记错了,要么就是老师不专业,
n|0 = Math.floor(n)
,|0
才是Math.floor
。感谢@rozbo 的指正。
20 / 3 = 6.666666666666667
6.666666666666667 | 1 = 7
6.666666666666667 | 0 = 6
如@rozbo所说的3.99 | 1 = 3。
| 0 或 | 1 都有取整的作用。但用Math.ceil和Math.floor,代码可读性更高。