开心果价格,三沙市-这样回你微信的人,就别再聊了,微信聊天

Javascript很古怪。不相信我?测验运用map和pars美素素eInt将字符串数组转换为整数。发动操控台(Chrome上的F古宜娣12),张贴以下内容,然后按Enter['1', '7', '11'].map(parseInt);
仿制代码

咱们终究得到的不是一个[1, 7, 11] 这样的整数数组,而是这样的长这样的 [1, NaN, 3] 一个数组。要了解究竟发作了什么,咱们首先要评论一些 Javascript 概念。假如你想要一个摘要(TLDR),我在本故事结尾处加入了一个快速摘要。

真值 & 假值

这是Jav泪水之池ascript中一个疯人院杜东简略的if-else句子:

if (true) {
// 永久都会运转
} else {
// 永久不会运转
}

在这种情况下,if-else 句子的条件为 true,因而一直履行 if-block 句子块并疏忽 else-block 句子块。这是一个简略的比如,由于 true 是一个布尔值。假如咱们将非布尔值作为条件会怎么样呢?

if ("hello world") {
// 他会运转吗?
console.log("Condition is truthy"狻戬平被曝光电视节目);
} else {
// 仍是运转这个?
console.log("Condition is falsy");
}

测验在浏览器的操控台中运转此代码(Chrome上的F12)。您应该发现 if-block 句子块运转。这是由于字符串目标"hello world"是true。

每个Javascript目标当放置在布尔上下文中时都是真值或假值。例如 if-else 句子,会把Javascript目标转为true或false。那么哪些目标是true的,哪些是false的呢?这是一个简略的规矩:

Javascript中当以下的值放置在布尔上下文中时会回来false

false,0(""空字符串),null,undefined和NaN。

进制(基数)

0 1 2 3 4 5 6 7 8 9 混沌天地诀10

当咱们从0到9计数时,每个数字(0-9)都有不同的符号。可是,一旦咱们到达10,咱们需求两个不同的符号(1和0)来表明数字。这是由于咱们的小数计数体系的基数(或进制)为10。

基数是最小的数字,只能由多个符号表明。不同的计数体系具有不同的基数,因而,相同的数字可以指计数体系中的不同数字。

10进制 二进制 16进制
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101这一生宠你到老 D
14 1110 E
15 1111 F
16 10000 10
17 10001 11

例如,查看上骏河湾作业表,咱们看到相同的数字11可以表明不同计数体系中的不同数字。假如进制(基数)为2,则表明数字 3。假如进制(基数)为16,则表明数字mg08式马克沁重机枪17。

您或许现已留意严梓瑞到,在咱们的示例中,当输入为11时,parseInt回来3,这对应于上表中的二进制列。

函数参数

Javascript男人自学风水盗墓尼坤毒打昌珉的照片中的函数可以运用恣意数量的参数调用,即便它们不等于声明的函数参数的数量。短少的参数被视为未定义,而剩余的参数会被疏忽(但会存储在相似数组的参数目标中)。

function foo(x, y) {
console.log(x);
console.log(y);
}
foo(1, 2); // logs 1, 2
foo(1); // logs 1, undefined
foo(1, 2, 3); // logs 1, 2

map()函数

咱们快到了!

Map是Array原型中的一个办法,它回来一个新的数组,其结果是将原始数组的每个元素传递给一个函数。例如,以下代码将数组中的每个元素乘以3

function multiplyBy3(x) {
return x * 3;
}
const result = [1, 2, 3, 4, 5].map(multip开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天lyBy3);
console.log(result); // log关婷娜性感s [3, 6, 9, 12, 15];

现在,开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天假定我想运用map()(没有回来句子)记载每个元素。我应该可以console.log作为一个参数传递给map()......

[1,2,3,4,开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天5] .map(co开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天nsole.log);

一些十分古怪的作业正在发作。每次console.log调用都记载索引和完好数组,而不是仅记载值。[1, 2, 3, 4, 5].map(console.log);
// 上面的比如相当于
[1, 2, 3, 4, 5].map(
(val, index, array) => console.log(val, index, array)
);
// 而不是陆昊和陆定一的合影这样
[1, 2, 3, 4, 5].map(
val => console.log(val)
);

当一个函数传递到map(),关于每次迭代,三个参数传递到函数:currentValue,currentIndex,和完好的ar开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天ra敞开女y。这便是每次迭代记载三个条目的原因。

咱们现在具有处理这个疑团所需的一切部分。

解开疑团

ParseInt有两个参数:string和radix(进制)。假如供给的radix(进制)为空或许为假值,进制(基数)默许设置为10。

parseIn繁花落尽执何手t('11'); => 11
parseInt('11', 2); => 3
parseInt('11', 16); => 17
parseInt('11', undefined); => 11 (radix(进制) 为假)
parseInt('11', 0); => 11 (radix(进制) 为假)

现在让咱们一步一步地运转咱们的示例。

['1', '7', '11'].map(parseInt); => [1, NaN, 3]
// 第一次迭代: val = '1', index = 0, array = ['1', '7', '11']
parseInt('1', 0, ['1', '7', '11']); => 1

由于0是假的,因而进制(基数)设置为默许值10。 parseInt()只承受两个参数,因而['1', '7', '11']会被 疏忽。字符开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天串'1'在10进制(基数)中的字符串表明数字1。

// 第2次迭代: val = '7', index = 1, array = ['1', '7', '11']
parseInt('7', 1, ['1', '7', '11']); => NaN

在进制(基数)为1体系中,符号'7'不存在。与第一次迭代相同,疏忽最终一个参数。所以,parseInt()回来了NaN。

// 第三次迭代: val = '11', index = 2, array = ['1', '7', '11']
parseInt('11', 2, ['1', '7', '11']); => 3

在进制(基数)为2(二进制)体系中,符号'11'表明数字3,最终一个参数被疏忽。

摘要(TLDR)

['1', '7', '11'].map(parseInt) 不能按预期作业,由于在每次迭代中关照妇 map 传递三个参数到 parseInt()。第二个参数 index 作为radix(进制)参数传递给 parseInt 。因而,运用不同的进制(基数)解析数组中的每个字符串。'7' 被解析为进超进化武祖制(基数)为 1,它是 NaN,'11' 被解析为进制(基数)为 2,它的值为 3,'1' 被解析为默许的进制(基数)为 10,由于它的索引 0 是假值。

有喜爱的小伙伴 大邱庄铁哥们帮手请重视下。

我是开心果价格,三沙市-这样回你微信的人,就别再聊了,微信谈天您们的搬运工。

作者:alentan

链接:https://juejin.im/post/5d0202da51882546dd10087b

来历:掘金

点击展开全文

上一篇:

下一篇:

相关推荐