Chrome/Chromium不知道JavaScript函数Math.sign

Mic*_*ael 1 javascript math sign chromium

对于滚动功能,我使用了一些数学函数:

transform: "rotateY("+(Math.sign(this._backlog)*Math.sqrt(Math.abs(this._backlog)))+"deg)"
Run Code Online (Sandbox Code Playgroud)

虽然这在Firefox中运行良好,但在Chrome中无法使用以下消息:

Uncaught TypeError: Object #<Object> has no method 'sign' 
Run Code Online (Sandbox Code Playgroud)

Math.abs和Math.sqrt正在运行.

我可以在Chrome中使用哪种功能?

Dav*_*ave 7

Math.sign仅仅是ES6(§20.2.2.28)规范草案的一部分,该草案不完整.从发动机到发动机,支持尚未指定的功能可能很不稳定.

MDN此前声称Chrome 32支持这一点,但据我所知,这是完全错误的.我的Chrome版本(36)不支持它,MDN现在声称只有FireFox支持此功能:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign.

但这是一个很容易写自己的功能:

function sign(x){
    if( +x === x ) { // check if a number was given
        return (x === 0) ? x : (x > 0) ? 1 : -1;
    }
    return NaN;
}
Run Code Online (Sandbox Code Playgroud)

正确处理NaN,+/ - Infinity和-0(sign(-0)==-0,sign(NaN)==NaN),非数字输入将返回NaN.如果你不关心非数字输入,你可以使用这个简化的单行(仍然处理NaN,+/ - Infinity和-0但不检查输入类型):

function sign(x){return x>0?1:x<0?-1:x;}
Run Code Online (Sandbox Code Playgroud)