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.+根据上下文的不同,它有很多含义。我完全同意胡安的看法。谢谢