为什么 parseInt 显示 Nan? - Angular

Why is parseInt displaying Nan? - Angular

我目前正在遍历数组并将键添加到我的面板数组。我得到正确的数组长度,它是三个,但我的 parseint 显示的是 NaN。我如何将字符串键转换为 int 以显示 panel-0 而不是 panel-NaN。

Object.keys(this.Category).forEach((key) => {
      this.panels.push(parseInt(key, 3));
      this.activeIds = this.panels.map(p => 'panel-' + p);
    });```

您正在做的是 parseInt('Car' 3),因为“Car”不是数字,您将得到 NaN

可能你想要这样的东西:

Object.keys(this.Category).forEach((key) => {
   this.panels.push('panel-' + panels.length + 1);
});

Parseint 接受一个字符串和一个介于 2,36(包括两端)之间的数字,称为基数。它消除了所有空格,然后开始询问“这个数字是在 0-(radix-1) 之间吗”?如果它找到的第一个字符,在它没有空格之后,不是它认为的数字,这是它吐出 NaN 的两个条件之一。然后它逐个字符地评估直到找到一个数字。 parseInt("-bob",36) 将给出等于 -bob 基数 36(也称为 -15131)的整数。 parseint("3",3) 会给你 NaN。 parseint(" 1234567890", 10) 给出 1234567890。

您的示例正在绘制一把钥匙。在不知道什么 的情况下,密钥是它可能以无效字符 开头。但是,假设您已经完成了尽职调查并清理了数据。您还要求数据以 3 为底数。当您依赖默认基数时,初始字符有时可以确定基数。如果你坚决想要 0-9 之间的数字(每天以十为基数),你应该输入 10 作为第二个参数。如果你自己不输入基数,它可能会根据操作环境决定以 0 开头的数字是 8 进制还是 16 进制。

Mozilla's documentation describes the behavior in detail as well as edge cases and work arounds.