+ev.clientX === ev.clientX in WinJS (Windows 8)

3
我正在实现缩放代码。
我简单地查看了WinJS语义缩放实现,并找到了有趣的代码片段。
Windows JavaScript库1.0/js/ui.js
行号:30710,30720
return {
   x: +ev.clientX === ev.clientX ? (ev.clientX - sezoBox.left - sezoPaddingLeft - sezoBorderLeft) : 0,
   y: +ev.clientY === ev.clientY ? (ev.clientY - sezoBox.top - sezoPaddingTop - sezoPaddingTop) : 0
};

为什么会出现+ev.clientX === ev.clientX的情况?

代码肯定会更清晰,如下所示:x: isNan(ev.clientX) ? 0 : (ev.clientX - sezoBox.left - sezoPaddingLeft - sezoBorderLeft) - Ruan Mendes
啊哈。+ 根据上下文有很多意思。我完全同意Juan的观点。谢谢。 - popopome
4个回答

4

一元操作符+被用作将数值转换为Number类型。这是确保ev.clientX是一个数值的一种非常晦涩的方法。

我的建议:不要使用它。 我猜这个人真的喜欢他的单行代码。我怀疑他的同事是否同意。


3
这是一种检查ev.clientX是否为非数字的方法。
x === x 

等同于

!isNaN(x)

2

+variable将变量解析为数字,例如:

var a = "1";
+a; // 1

所以这是一个检查event.clientX是否为数字的方法:

var a = "1";
+a === a // false

a 是一个字符串。

var a = 1;
+a === a // true

2
他们正在检查ev.clientX是否为数字,且不是NaN。如果是,则进行计算,否则返回0。
一元加运算符+将任何值强制转换为数字。因此,如果ev.clientX的类型不是number,则+ev.clientX !== ev.clientX
还要注意NaN !== NaN,因此如果ev.clientXNaN,则它将返回false。

你的回答中真的需要使用“显然”这个词吗?对于不了解一元运算符+作用的人来说并不是那么明显。 - Ruan Mendes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接