看到了一个有趣的网站,https://jsisweird.com/,记录了25个古怪的JavaScript问题,学习一下
1. true + false
True等于1,False等于0,相加等于1
2. [,].length
原因分析
js数组中两个连续逗号中间可以认为有一个undefined
,所以答案是3
3. [1, 2, 3] + [4, 5, 6]
js中两个数组相加则会得到一个字符串,答案是"1,2,34,5,6"
4. 0.2 + 0.1 === 0.3
这个问题就好理解了,浮点数运算造成0.1+0.2不等于0.3
5. 10,2
js中逗号运算式的结果是最终一个式子的结果, 答案是2
6. !!""
空字符串在js可以认为是false,所以答案是false
7. +!![]
js中空数组空true
,故答案为1
8. !!!true
很好理解答案为false
9. true == “true”
不同类型作比较,结果为false
10. 010 - 03
js将0开头的数字识别为八进制数字,010的十进制等于8,答案为5
11. “” - - “”
js中空字符串会转换为0,第一个减号为减法运算,第二个减号为负号,答案为0
12. null + 0
js中null会转换为0,答案为0
13. 0/0
js中结果为非数字类型,答案为NaN
14. 1/0 > Math.pow(10, 1000)
js中1/0和Math.pow(10, 1000)都是无穷大,两者应该相等,答案为false
15. true++
提示语法错误
16. “” - 1
答案为-1
17. (null - 0) + “0”
数字和字符串相加按字符串拼接处理
18. true + (“true” - 0)
不同类型相加结果为NaN
19. !5 + !5
两个false相加,结果为0
20. [] + []
数组相加结果为空字符串
21. NaN === NaN
NaN和任何类型都不相等,包括自己
22. NaN++
答案:NaN
23. undefined + false
undefined转换为数字为NaN,答案:NaN
24. +0 === -0
0和0是相等的,答案为true
25. - “” + + “1” * null - [,]
- ""为0
+ “1” * null为0
[,]为0
0+0-0,结果为0