Javascript (t/=d/2)在本规范中是什么意思?
世界上有很多类似的方法:Javascript (t/=d/2)在本规范中是什么意思?,javascript,jquery,easing,Javascript,Jquery,Easing,世界上有很多类似的方法: easeInOutQuint: function (x, t, b, c, d) { if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; return c/2*((t-=2)*t*t*t*t + 2) + b; } (为了简洁起见,删除了重复的JS Lint输出线) (t/=d/2)在这里做什么 我想修复它(而不是告诉grunt忽略它,我现在已经这么做了),但我不明白它在做什么。某种正则表达式?请注意,t和d作
easeInOutQuint: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
}
(为了简洁起见,删除了重复的JS Lint输出线)
(t/=d/2)
在这里做什么
我想修复它(而不是告诉grunt忽略它,我现在已经这么做了),但我不明白它在做什么。某种正则表达式?请注意,t
和d
作为参数传入。算术速记?两者都有
编辑
谢谢你快速的回答。将行更改为
if((t=t/(d/2))<1)
得到jshint停止大惊小怪。将添加关于jshint/jslint选择抛出此错误的原因的答案。TL;DR:正是因为发生在我身上的事情:“这是算术还是正则表达式?”那么jsHint在这里是错的。那是
t /= d / 2
也就是说
t = t / (d / 2)
请注意,括号在替代版本中很重要,因为通常/
运算符从左向右绑定。/=
运算符的优先级低于/
无论如何,整个事物的值将是“t”的结果(更新)值
现在,从更广泛的意义上说,jsHint抱怨这一点的晦涩也许是对的,但这是一个风格问题。运算符赋值运算符是一个相当古老的传统,至少可以追溯到C.它的意思是t=(t/(d/2))代码>-这两个语句是等效的
/=
运算符是运算符的一元版本,用于除以右侧操作数并将结果赋给左侧的变量。它是一种简写形式
$a/=$b;与$a=$a/$b相同
(t/=d/2)与t=t/(d/2)相同。为什么我首先得到错误:
引发此错误是为了突出显示一段可能令人困惑的代码。如果您不修复此错误,您的代码将运行良好,但它可能会让其他人感到困惑,尤其是对快速搜索您的脚本的人来说
/字符在JavaScript中是不明确的。它可以表示正则表达式文字的开始或结束,如上面的示例所示,也可以解释为除法运算符。与大多数算术运算符一样,除法运算符可以与赋值运算符组合生成一个速记:
From:它说t=(t/(d/2)),这是有效的代码,没有什么需要修正的。你是说t/d/2
不同于t/(d/2)
?:)<代码>1/3/2
=0.1667,1/(3/2)
=0.6667所以……是的。它们是不同的。数学中的基本运算顺序。这是标准的东西,你甚至在接触编程之前都应该记住。主要是因为并不是所有的编程语言都尊重它,所以手动放置括号来显式地分组节。@Jack yep-用正常的代数术语来考虑它。在没有paren的情况下,除法从左到右,并且(t/d)/2
不同于t/(d/2)
。如果你把除法运算看成是逆相乘,它就会变得更清楚:t/d/2
是t*(1/d)*(1/2)
,而t/(d/2)
是t*(2*1/d)
我知道我的愚蠢来自何方;我把它比作x/y/z
vsx/z/y
,这完全是另一回事;-)该喝咖啡了。
t = t / (d / 2)