.map(Number)
字符数组转数字数组
1 | ['1','2','3'].map(Number) |
上述代码等价于:
1 | ['1','2','3'].map((value, index, array) => Number(value, index, array)) |
尽管传递了额外的参数,但是Number忽略了除第一个参数之外的所有内容。
String与Boolean也是如此:
1 | [1,2,3].map(String) |
.map(Number.call, Number)
1 | let array = Array.apply(null, {length: 10}).map(Number.call, Number) |
1. Array.apply(null, {length: 10})
Array.apply(null, {length: 10})
创建了一个长度为10的数组。
func.apply(thisArg, [argsArray])
apply()
方法接收两个参数,第一个为调用时指定的上下文(context),第二个为一个数组或者一个类数组对象。
{length: 10}
是一个类数组对象,长度为10,每个元素值是undefined
。
所以Array.apply(null, {length: 10})
等价于Array(undefined, undefined, ...)
。
2. .map(Number.call, Number)
Array.prototype.map(callback, thisArg)
Array.prototype.map
第一个参数是回调函数,第二个参数是回调函数的this值。
.map(Number.call, Number)
等价于:
1 | .map((value, index, array) => { |
第一个参数value
被当做this
:
1 | .map((value, index, array) => { |
最后得到:
1 | .map((value, index) => Number(index)) |
.map(parseInt)
1 | ['1','2','3'].map(parseInt) |
上述代码等价于
1 | ['1','2','3'].map((item, index)=> { |
进一步:
1 | [parseInt('1', 0), parseInt('2', 1), parseInt('3', 2)] |
parseInt文档:mdn parseInt
parseInt(string, radix);
radix,一个介于2和36之间的整数
在基数为 undefined,或者基数为 0 或者没有指定的情况下,JavaScript 作如下处理:
- 如果字符串 string 以”0x”或者”0X”开头, 则基数是16 (16进制).
- 如果字符串 string 以”0”开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值。
如果字符串 string 以其它任何值开头,则基数是10 (十进制)。- 如果第一个字符不能被转换成数字,parseInt返回NaN。
parseInt('1', 0)
,相当于parseInt('1', 10)
,值为1;
parseInt('2', 1)
,基数1不合理,经测试值为NaN
;
parseInt('3', 2)
,基数2合理,但是3不是二进制,值为NaN
所以结果为[1, NaN, NaN]
。