Javascript +;WinJS(Windows 8)中的ev.clientX===ev.clientX

Javascript +;WinJS(Windows 8)中的ev.clientX===ev.clientX,javascript,windows-8,winjs,Javascript,Windows 8,Winjs,我正在努力实现收缩放大/缩小代码。 我只是简单地检查了WinJS语义缩放实现 并找到了有趣的代码片段 用于JavaScript 1.0/js/ui.js的Windows库 行号:3071030720 return { x: +ev.clientX === ev.clientX ? (ev.clientX - sezoBox.left - sezoPaddingLeft - sezoBorderLeft) : 0, y: +ev.clientY === ev.clientY ? (ev

我正在努力实现收缩放大/缩小代码。
我只是简单地检查了WinJS语义缩放实现 并找到了有趣的代码片段

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

行号:3071030720

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

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

x === x 
相当于

!isNaN(x)

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

一元加号运算符
+
将任何值强制为数字。因此,如果ev.clientX没有类型
number
,那么
+ev.clientX!==ev.clientX


还要注意,
NaN!==NaN
,因此如果
ev.clientX
NaN
,则返回false。

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

var a = "1";
+a; // 1
因此,如果
event.clientX
是一个数字,则需要检查se:

var a = "1";
+a === a // false
a
是一个字符串

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

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

x === x 
我的建议是:不要使用它。
我猜这家伙真的很喜欢他的台词。我怀疑他的同事是否同意他的观点。

你的回答中真的需要“显然”吗?对于那些不知道一元
+
做了什么的人来说,这一点就不那么明显了。代码肯定会像
x:isNan(ev.clientX)那样清晰?0:(ev.clientX-sezoBox.left-sezoPaddingLeft-sezoBorderLeft)
Aha.+根据上下文的不同,它有很多含义。我完全同意胡安的看法。谢谢