以下一段代码将图像旋转到一定角度,这给我们一种圆旋转的感觉在旋转图像的函数中,他们使用了三重"="符号(===)以及","(在下面的代码中更好地解释),有人可以解释函数中发生了什么吗提前致谢
var c=$(".round-slider");
$(".circle-1").on("click", function () {
"240" === c.attr("data-rotate").slice(3) && c.attr("data-rotate", "deg120"),
"-120" === c.attr("data-rotate").slice(3) && c.attr("data-rotate", "deg-240"),
"0" === c.attr("data-rotate").slice(3) && c.attr("data-rotate", "deg120"),
"360" !== c.attr("data-rotate").slice(3) && "-360" !== c.attr("data-rotate").slice(3) || (c.addClass("stopTransition"),
c.attr("data-rotate", "deg0"),
setTimeout(function () {
c.removeClass("stopTransition"), c.attr("data-rotate", "deg120")
}, 10)),
setTimeout(function () {
c.addClass("slide-3"), c.removeClass("slide-1 slide-2")
}, 15)
})
这个函数是以我强烈反对的风格编写的;作者要么有独特的风格,要么是通过优化器运行的。
想象一下一个简单的if语句:
if (x === 3) x = 7;
您可以使用布尔值和运算符 (&&) 重写此值,因为如果前半部分为 false,则不会计算运算符的右半部分。(这称为短路评估。例:
(x === 3) && (x = 7);
所以这个函数只是一堆if语句,以一种不寻常的风格编写。
逗号而不是分号是一个奇怪的(尽管合法的)选择。在此特定函数中,您可以将这些逗号替换为分号,并且不会有功能更改。
( === ) 检查等于强数据类型兼容,但 ( == ) 检查数据类型兼容。
if( "10" == 10 ) {
console.log( "this will be printed");
}
if( "10" === 10 ) {
console.log( "this won't be printed");
}
" === " 做两件事,详细信息如下
- 匹配数据类型(字符串 = 字符串)
- 匹配值 ( "240" = "240" )
假设 c.attr("data-rotate").slice(3) 包含一个值 240,下面是访问该值的代码
var dataRotateValue= c.attr("data-rotate").slice(3);
if(dataRotateValue === "240") {
console.log("hey value matched as well as data type")
}
上述值和数据类型匹配,我们的 if 块得到了真实的条件