如何对JavaScript怪异表达式 +!!NaN * "" - - [,] 进行求值?
JS 怪异表达式
+!!NaN * "" - - [,] 求值步骤 前置说明
本次涉及的JS运算符优先级从高到低为:逻辑非! > 一元正负号+/- > 乘法* > 加减法+/-,同优先级从左到右执行,所有运算涉及隐式类型转换时遵循ECMAScript标准规则。
第一步:计算 !!NaN
- NaN属于JS内置假值,逻辑非
!作用于假值返回布尔值true - 第二次取反作用于
true,返回false - 本步结果:
!!NaN = false
第二步:计算一元正号作用后的 +!!NaN
- 一元正号会强制将操作数转为数值类型,布尔值
false转数值的结果为0 - 本步结果:
+!!NaN = 0
第三步:计算乘法项 +!!NaN * ""
- 乘法运算会先将两个操作数隐式转为数值再计算
- 空字符串
""转数值的结果为0 - 本步结果:
0 * 0 = 0,左半部分乘法项最终值为0
第四步:计算右半部分 - [,]
[,]是带尾逗号的数组字面量,等价于[undefined](尾逗号会被JS解析器忽略,仅保留前面的占位元素)- 一元负号会强制将数组转为数值:数组转数值先调用
toString()方法,[undefined].toString()返回空字符串"",空字符串转数值为0 - 加负号后结果为
-0 - 本步结果:
- [,] = -0
第五步:计算最终减法 0 - (-0)
- JS中数值运算规则:减去一个负数等于加上对应的正数,
0 - (-0)等价于0 + 0 - 最终运算结果:
0
内容的提问来源于stack exchange,提问作者Francois LEJOLI
相关产品推荐
相关产品推荐

