parseInt 或 parseFloat 或字符串强制转换或 Number() 将字符串转换为数字

parseInt nor parseFloat nor string coercion nor Number() converting string to number

我的 dom 中有一组相同的 class 字符串。我需要将字符串转换为数字,然后对它们执行计算并将它们 return 显示到屏幕上。我使用过 parseInt、parseFloat、Number(),甚至使用 +variable 进行强制转换;没有任何交谈。在每种情况下,我都将 typeof 显示为“string”。我不确定我做错了什么。有人可以帮我找到我缺少的东西吗?这是我的 html:

<div class="price">
  <span class="label">from</span>
  <span class="value">
    <span class="text-lg lh1em item "> ,845.00</span>
  </span>
  <span class="value">
    <span class="text-lg lh1em item "> ,645.00</span>
  </span>
</div>

我的Javascript如下:

let customPrice = document.getElementsByClassName('lh1em');

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.substr(1); 
    let withoutComa = withoutDollar.replace(",",'');
    // parseFloat(withoutComa);
    let noPointZero = withoutComa.replace(/\.00/, '');
     // noPointZero * 1;
    // parseInt(noPointZero);
    Number(noPointZero);
    console.log(typeof noPointZero);
}); 

没有 typeof,我得到正确的数字值作为字符串。 我怎样才能强制这是一个数字?谢谢。

有一个 space 你的 substr() 正在摆脱。改为 .replace(/[^0-9.]/g, '')

数字和字符串是不可变的。 将转换分配给稍后使用的变量。

let customPrice = document.getElementsByClassName('lh1em');

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.substr(1); 
    let withoutComa = withoutDollar.replace(",",'');
    let noPointZero = withoutComa.replace(/\.00/, '');
    noPointZero = Number(noPointZero);
    console.log(typeof noPointZero, noPointZero);
}); 
<div class="price">
  <span class="label">from</span>
  <span class="value">
    <span class="text-lg lh1em item "> ,845.00</span>
  </span>
  <span class="value">
    <span class="text-lg lh1em item "> ,645.00</span>
  </span>
</div>

您在正文开头有一个 space。所以 substr(1) 正在删除 space,而不是 $。使用trim()去除周围的白色space.

最后还需要赋值Number()的结果。它就像所有其他修正一样 -- 它 returns 一个新值,它不会修改现有的值。

要替换逗号,您需要使用带有 g 修饰符的正则表达式。替换字符串只会替换第一次出现的地方。

Array.from(customPrice).forEach(function(dollarAmount) {
    let withoutDollar = dollarAmount.innerText.trim().replace(/^$/, '');
    let withoutComa = withoutDollar.replace(/,/g,'');
    // parseFloat(withoutComa);
    let noPointZero = withoutComa.replace(/\.00$/, '');
     // noPointZero * 1;
    // parseInt(noPointZero);
    let numeric = Number(noPointZero);
    console.log(typeof numeric);
});