我正在浏览一个jQuery平滑滚动教程,并尝试弄清楚它是如何工作的,当我点击这行代码时:
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚它的作用.看起来这个人正在为一个变量分配一个字符串,但它看起来还有点像是在测试那个变量.我不明白使用&&和|| 这里.任何人都能解释一下吗?
谢谢!
编辑:哇!真是个回应!这对我来说有点了解,但是 - 我将不得不打印出来或者其他东西并继续努力.一旦我了解了正在发生的事情,我将能够选择最能帮助我的答案.特别是这一点:
if ($target.length && $target) {
$target = $target;
Run Code Online (Sandbox Code Playgroud)
让我筋疲力尽 程序如何知道将$ target分配给$ target?操作是否将$ target分配给自身的第一个引用(等号的左侧),或者第二个引用自身(右侧,&&之后)?
它是等效三元运算符的神秘(或优雅?)版本
$target = ($target.length && $target) ? $target : $('[name=' + this.hash.slice(1) +']');
如果$ target的评估不改变$ target的值,则此三元和原始短路表达式将返回完全相同的值.但是如果$ target的评估改变了$ target的值,则SCE和三元返回不同的值,例如
var a = 1; b = 2; c = 3; a && ++b || c returns 3; //resetting b b = 2 a && ++b ? ++b : c returns 4;
如果$ target的评估改变了$ target的值,那么SCE的等效三元运算符$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');将如下
$target = ($result= ($target.length && $target)) ? $result : $('[name=' + this.hash.slice(1) +']');
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |