在jquery.easing plugin中有很多类似的方法:
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;
}
(t/=d/2)
严重惹恼了jshint!
Linting assets/js/_main.js ...ERROR
[L119:C13] E030: Expected an identifier and instead saw '='.
if ( (t/=d/2) < 1) {
[L119:C14] E020: Expected ')' to match '(' from line 119 and instead saw 'd'.
[L119:C19] W116: Expected '{' and instead saw '<'.
[L119:C19] E030: Expected an identifier and instead saw '<'.
[L119:C19] W030: Expected an assignment or function call and instead saw an expression.
[L119:C20] W033: Missing semicolon.
[L119:C21] W030: Expected an assignment or function call and instead saw an expression.
[L119:C22] W033: Missing semicolon.
[L119:C22] E030: Expected an identifier and instead saw ')'.
[L119:C22] W030: Expected an assignment or function call and instead saw an expression.
[L119:C23] W033: Missing semicolon.
(为简洁起见,删除了重复的JS Lint输出行)
(t/=d/2)
在这做什么?
我想修复它(告诉咕噜忽略它,我现在已经做过),但我不明白它在做什么。正则表达某种?请注意,t
和d
作为参数传入。算术速记?既?
编辑
感谢快速的快速回答。将行更改为if ( (t = t / (d / 2)) < 1)
让jshint停止烦恼。将添加答案为什么jshint / jslint选择抛出此错误。 TL; DR:因为我发生了什么:“这是算法还是正则表达式?”
答案 0 :(得分:6)
jsHint这里错了。也就是说&#39; S
t /= d / 2
表示
t = t / (d / 2)
请注意,括号在替代版本中很重要,因为通常/
运算符从左到右绑定。 /=
运算符的优先级低于/
。
无论如何,整个事物的价值将是&#34; t&#34;的结果(更新)值。
现在,从更广泛的意义上说,jsHint 可能正确地抱怨它的含糊不清,但那是一种风格问题。运算符赋值运算符是一个相当古老的传统,至少可以追溯到C。
答案 1 :(得分:1)
它说t = (t / (d / 2));
- 这两个陈述是等价的。
/=
运算符是运算符的一元版本,除以右侧操作数并将结果赋值给左侧的变量。
答案 2 :(得分:1)
这是速记。
$ a / = $ b;与$ a = $ a / $ b;
相同(t / = d / 2)与t = t /(d / 2)
相同答案 3 :(得分:0)
为什么我首先得到错误:
引发此错误以突出显示可能令人困惑的代码段。如果你没有修复这个错误,你的代码就会正常运行,但是对其他人来说可能会让人感到困惑,尤其是乍一看有人快速搜索你的脚本。
/字符在JavaScript中含糊不清。它可以表示正则表达式文字的开头或结尾,如上例所示,也可以解释为除法运算符。与大多数算术运算符一样,除法运算符可以与赋值运算符组合以生成简写:
来自:http://jslinterrors.com/a-regular-expression-literal-can-be-confused-with/