今天看一个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,代码可读性更高。