请求解释Codewars中无字母数字返回5的函数解决方案
拆解Codewars这道“返回5”的JS奇技淫巧方案
让我来一步步拆解这两个有趣的解决方案,它们都是利用了JavaScript的隐式类型转换和运算符特性,在字符限制下凑出数字5的:
第一个方案:_=_=>-~-~-~-~-~[]
咱们从里到外拆:
- 首先,
[]在JavaScript中被隐式转换为数字时会变成0(你可以在浏览器控制台敲+[]试试,结果就是0)。 - 然后看
~这个按位取反运算符:它的运算规则是~x = -(x + 1)。所以~0的结果就是-1。 - 接着
-~x就等于-(-(x+1)) = x+1,相当于给x加1。比如-~0是1,-~1是2,以此类推。 - 这里连续叠了5次
-~,从初始的0(来自[])开始,每次加1,五次之后正好得到5。整个表达式最终结果就是5,所以这个箭头函数返回的就是目标值。
第二个方案:_=()=>+!""+!""+!""+!""+!""
这个是利用布尔值转数字的特性:
- 先看
!"":空字符串""在布尔判断里是false,!是逻辑非运算符,所以!""会把false反转成true。 +!""里的+是一元正号运算符,它会把布尔值隐式转成数字:true对应1,false对应0。所以+!""的结果就是1。- 这里把五个
+!""用加法运算符连起来,本质就是1 + 1 + 1 + 1 + 1,结果自然是5。这个函数就是返回这个相加的结果。
这类题目核心就是玩JS的类型隐式转换和运算符特性,因为限制了可用字符,所以只能用这种“歪门邪道”来构造目标数字~
内容的提问来源于stack exchange,提问作者user8586459
相关产品推荐
相关产品推荐

