1.['1','5','12'].map(parseInt)会返回[1, NaN, 1]
这样结果主要是parseInt函数导致的
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix
是 2-36 之间的整数,表示被解析字符串的基数。
- 第一次:
radix
为 0 ,表示 10 进制,所以parseInt('1', 0)最后一个省略
返回1
- 第二次:
radix
为 1 ,不在 2-10 的范围内,所以parseInt('5', 1)
返回NaN
- 第二次:
radix
为 2 ,表示二进制,是此前往后解析的,1是有效数值,2不是二进制的有效数值,所以结果返回为1
2.console.log([] == ![]) 会返回true
console.log([] == ![])
的结果为 true
,这个表达式涉及到几个JavaScript中的隐式转换规则
-
空数组
[]
与逻辑非![]
的运算:首先,空数组[]
在布尔上下文中被视为true
(因为所有非空对象和数组在布尔上下文都是true
),因此![]
就是false
。 -
比较操作
==
:接下来的比较操作==
是宽松相等运算符,它会在比较前对两边的值进行类型转换,试图让它们成为相同的类型以便比较。 - 空数组
[]
转换为布尔值: 在进行比较时,空数组[]
会被转换成其对应的布尔值。如前所述,空数组在布尔上下文是true
。 -
false
转换为数字:另一边是false
,在与布尔值或数字进行比较时,![]
的false
会被隐式转换转换为数字0
。 -
空数组
[]
会被转换为原始值,对于数组来说,这个过程并不直接转为布尔值或数字,而是尝试用toString()
方法转换,所以[]
转换成字符串为""
(空字符串)。 -
将要字符串
""与
![] 比较 由于前面已经把![] 转换成为了0 当0与""进行==比较的时候 ""为false也会将转换成为0 所以 0 == 0 就是true。
你可以终止 forEach 吗?
3.你可以终止 forEach 吗?
不能跳出循环