javascript烧脑题,[null]==0,[undefined]==0真假
本文介绍了javascript烧脑题,[null]==0,[undefined]==0真假的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
以下返回又是什么鬼?希望有大神解释清楚。
[1,null,3].map(x=>x+1)
和
[1,undefined,3].map(x=>x+1)
以及
[1,,3].map(x=>x+1)
各返回什么?
解决方案
标题讨论的是相等运算符==
么?
相等运算符的语法行为多变,其中的算法和+
有些不同,无法为后面的返回结果提供参考,在这里便不赘述。
相等运算符的规则复杂,推荐参考资料
http://es6.ruanyifeng.com/#docs/spec
中第二部分--相等运算符,当中详细讲解了==
的算法。
下面解释一下输出结果
[1,null,3].map(x=>x+1); \\[2, 1, 4]
[1,undefined,3].map(x=>x+1);\\[2,NaN, 4]
[1,,3].map(x=>x+1);\\[2,,4] 中间的空位是map函数直接跳过此项执行的结果
map(x=>x+1)
返回一个将原数组所有元素+1的数组,这里最重要的行为是x+1
,要讨论的是+
号。+
优先考虑字符串连接,当操作数都不是类字符串类型时,进行加法运算。这个过程中涉及类型转换(原始值转换)。
具体过程如下:
a + b
//判断是否需要转化为原始值
if(typeof a== 'object' || typeof b=='object'){//进行原始值转换
if(a instanceof Date){
a = a.toString();
}else{
a = a.valueOf?a.valueOf():a.toString?a.toString():a;
}
if(b instanceof Date){
b = b.toString();
}else{
b = b.valueOf?b.valueOf():b.toString?b.toString():b;
}
}
if(typeof a == 'string' || typeof b == 'string'){
return String(a)+String(b);//字符串连接
}else{
return Number(a)+Number(b);//加法运算
}
在题主提供的代码中,执行的是加法运算Number(a)+Number(b);//加法运算
这就涉及到类型转化
这篇关于javascript烧脑题,[null]==0,[undefined]==0真假的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文