3

我正在实现捏放大/缩小代码。
我只是检查了 WinJS 语义缩放实现并发现了有趣的代码片段。

适用于 JavaScript 1.0/js/ui.js 的 Windows 库

行号: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

4

4 回答 4

4

一元运算+符用作对 a 的强制转换Number。这是确保ev.clientX数字的一种非常模糊的方法。

我的建议:不要使用它。我猜这家伙真的很喜欢他的单行字。我怀疑他的同事是否同意他的看法。

于 2013-01-16T21:28:07.193 回答
3

这是一种检查是否ev.clientX不是数字的方法。

x === x 

相当于

!isNaN(x)
于 2013-01-16T21:25:46.657 回答
2

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

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

所以这是一个检查是否event.clientX是一个数字:

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

a是一个字符串。

var a = 1;
+a === a // true
于 2013-01-16T21:27:48.847 回答
2

他们正在检查是否 ev.clientX是一个数字,而它不是NaN。如果是,则进行计算,否则返回 0。

一元加运算符将+任何值强制为数字。所以,如果 ev.clientX 没有 type number,那么+ev.clientX !== ev.clientX.

还要注意NaN !== NaN, 所以如果ev.clientXNaN,那么它将返回 false。

于 2013-01-16T21:26:16.003 回答