JavaScript中(x > 0) - (x < 0) || +x解析及减号能否作比较运算符答疑
减号是否属于比较运算符
JavaScript 规范里,- 从来不是比较运算符,它只有两个原生作用:
- 作为二元运算符时做算术减法,计算两个操作数的差值
- 作为一元运算符时,对右侧操作数取负值
你看到它出现在比较相关的代码场景里,本质是利用了JS的隐式类型转换规则:比较表达式的返回值是布尔值,布尔值参与算术运算时会自动转成数值——true转为1,false转为0,这时候减号只是在计算两个转换后数字的差,本身不承担任何比较判断功能。
sign函数代码逻辑解析
先明确标准符号函数的返回规则:输入正数返回1,输入负数返回-1,输入+0返回+0,输入-0返回-0,输入NaN返回NaN。
核心语句(x > 0) - (x < 0) || +x的运行原理可以拆成两段解析:
第一段:(x > 0) - (x < 0)
两个括号内都是标准大小比较,返回布尔值,参与减法运算时自动转为数值:
- 传入正数时:
x>0为true(转1),x<0为false(转0),计算得1-0=1,属于truthy值,直接通过||返回,匹配正数返回1的要求 - 传入负数时:
x>0为false(转0),x<0为true(转1),计算得0-1=-1,属于truthy值,直接返回,匹配负数返回-1的要求 - 传入
+0、-0或者NaN时:两个比较表达式都返回false(转0),计算得0-0=0,属于falsy值,触发||的短路逻辑,执行右侧表达式。
第二段:+x
这里的+是一元加号运算符,作用是将操作数转为数值类型:
- 传入
+0时,+x返回+0 - 传入
-0时,+x返回-0 - 传入
NaN时,+x返回NaN
这部分正好补全了第一段逻辑没有覆盖的0和NaN场景,整个实现没有冗余分支判断,完全符合符号函数的标准返回要求。
内容的提问来源于stack exchange,提问作者barankibar
相关产品推荐
相关产品推荐

