var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue ); 
var intvalue = Math.round( floatvalue );
// `Math.trunc` was added in ECMAScript 6
var intvalue = Math.trunc( floatvalue );// value=x        //  x=5          5<x<5.5      5.5<=x<6  
Math.floor(value) //  5            5            5
Math.ceil(value)  //  5            6            6
Math.round(value) //  5            5            6
Math.trunc(value) //  5            5            5
parseInt(value)   //  5            5            5
~~value           //  5            5            5
value | 0         //  5            5            5
value >> 0        //  5            5            5
value >>> 0       //  5            5            5
value - value % 1 //  5            5            5// value=x        // x=-5         -5>x>=-5.5   -5.5>x>-6
Math.floor(value) // -5           -6           -6
Math.ceil(value)  // -5           -5           -5
Math.round(value) // -5           -5           -6
Math.trunc(value) // -5           -5           -5
parseInt(value)   // -5           -5           -5
value | 0         // -5           -5           -5
~~value           // -5           -5           -5
value >> 0        // -5           -5           -5
value >>> 0       // 4294967291   4294967291   4294967291
value - value % 1 // -5           -5           -5// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1
// value=x            x=900719925474099    x=900719925474099.4  x=900719925474099.5
Math.floor(value) //  900719925474099      900719925474099      900719925474099
Math.ceil(value)  //  900719925474099      900719925474100      900719925474100
Math.round(value) //  900719925474099      900719925474099      900719925474100
Math.trunc(value) //  900719925474099      900719925474099      900719925474099
parseInt(value)   //  900719925474099      900719925474099      900719925474099
value | 0         //  858993459            858993459            858993459
~~value           //  858993459            858993459            858993459
value >> 0        //  858993459            858993459            858993459
value >>> 0       //  858993459            858993459            858993459
value - value % 1 //  900719925474099      900719925474099      900719925474099// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1
// value = x      // x=-900719925474099   x=-900719925474099.5 x=-900719925474099.6
Math.floor(value) // -900719925474099     -900719925474100     -900719925474100
Math.ceil(value)  // -900719925474099     -900719925474099     -900719925474099
Math.round(value) // -900719925474099     -900719925474099     -900719925474100
Math.trunc(value) // -900719925474099     -900719925474099     -900719925474099
parseInt(value)   // -900719925474099     -900719925474099     -900719925474099
value | 0         // -858993459           -858993459           -858993459
~~value           // -858993459           -858993459           -858993459
value >> 0        // -858993459           -858993459           -858993459
value >>> 0       //  3435973837           3435973837           3435973837
value - value % 1 // -900719925474099     -900719925474099     -900719925474099按位或运算符可用于截断浮点数,它适用于正数和负数:
function float2int (value) {
    return value | 0;
}结果
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3我创建了一个JSPerf 测试 ,用于比较以下各项之间的性能:
Math.floor(val) val | 0 按位OR ~~val 按位NOT parseInt(val) 只适用于正数。在这种情况下,您可以安全地使用按位运算和Math.floor函数。 
但是,如果您需要使用代码来处理正数和负数 ,那么按位运算是最快的(OR 是首选运算)。 这个其他 JSPerf 测试比较相同的地方很明显,因为额外的符号检查Math 现在是四个中最慢的。
如评论中所述,BITWISE 运算符在带符号的 32 位整数上运算,因此将转换大数字,例如:
1234567890  | 0 => 1234567890
12345678901 | 0 => -539222987注意:你不能使用Math.floor()作为 truncate 的替代,因为Math.floor(-3.1) = -4而不是-3 !! 
截断的正确替换将是:
function truncate(value)
{
    if (value < 0) {
        return Math.ceil(value);
    }
    return Math.floor(value);
}var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue ); 
var intvalue = Math.round( floatvalue );
// `Math.trunc` was added in ECMAScript 6
var intvalue = Math.trunc( floatvalue );// value=x        //  x=5          5<x<5.5      5.5<=x<6  
Math.floor(value) //  5            5            5
Math.ceil(value)  //  5            6            6
Math.round(value) //  5            5            6
Math.trunc(value) //  5            5            5
parseInt(value)   //  5            5            5
~~value           //  5            5            5
value | 0         //  5            5            5
value >> 0        //  5            5            5
value >>> 0       //  5            5            5
value - value % 1 //  5            5            5// value=x        // x=-5         -5>x>=-5.5   -5.5>x>-6
Math.floor(value) // -5           -6           -6
Math.ceil(value)  // -5           -5           -5
Math.round(value) // -5           -5           -6
Math.trunc(value) // -5           -5           -5
parseInt(value)   // -5           -5           -5
value | 0         // -5           -5           -5
~~value           // -5           -5           -5
value >> 0        // -5           -5           -5
value >>> 0       // 4294967291   4294967291   4294967291
value - value % 1 // -5           -5           -5// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1
// value=x            x=900719925474099    x=900719925474099.4  x=900719925474099.5
Math.floor(value) //  900719925474099      900719925474099      900719925474099
Math.ceil(value)  //  900719925474099      900719925474100      900719925474100
Math.round(value) //  900719925474099      900719925474099      900719925474100
Math.trunc(value) //  900719925474099      900719925474099      900719925474099
parseInt(value)   //  900719925474099      900719925474099      900719925474099
value | 0         //  858993459            858993459            858993459
~~value           //  858993459            858993459            858993459
value >> 0        //  858993459            858993459            858993459
value >>> 0       //  858993459            858993459            858993459
value - value % 1 //  900719925474099      900719925474099      900719925474099// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1
// value = x      // x=-900719925474099   x=-900719925474099.5 x=-900719925474099.6
Math.floor(value) // -900719925474099     -900719925474100     -900719925474100
Math.ceil(value)  // -900719925474099     -900719925474099     -900719925474099
Math.round(value) // -900719925474099     -900719925474099     -900719925474100
Math.trunc(value) // -900719925474099     -900719925474099     -900719925474099
parseInt(value)   // -900719925474099     -900719925474099     -900719925474099
value | 0         // -858993459           -858993459           -858993459
~~value           // -858993459           -858993459           -858993459
value >> 0        // -858993459           -858993459           -858993459
value >>> 0       //  3435973837           3435973837           3435973837
value - value % 1 // -900719925474099     -900719925474099     -900719925474099按位或运算符可用于截断浮点数,它适用于正数和负数:
function float2int (value) {
    return value | 0;
}结果
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3我创建了一个JSPerf 测试 ,用于比较以下各项之间的性能:
Math.floor(val) val | 0 按位OR ~~val 按位NOT parseInt(val) 只适用于正数。在这种情况下,您可以安全地使用按位运算和Math.floor函数。 
但是,如果您需要使用代码来处理正数和负数 ,那么按位运算是最快的(OR 是首选运算)。 这个其他 JSPerf 测试比较相同的地方很明显,因为额外的符号检查Math 现在是四个中最慢的。
如评论中所述,BITWISE 运算符在带符号的 32 位整数上运算,因此将转换大数字,例如:
1234567890  | 0 => 1234567890
12345678901 | 0 => -539222987注意:你不能使用Math.floor()作为 truncate 的替代,因为Math.floor(-3.1) = -4而不是-3 !! 
截断的正确替换将是:
function truncate(value)
{
    if (value < 0) {
        return Math.ceil(value);
    }
    return Math.floor(value);
}