【问题标题】:.value return string until I save it to variable.value 返回字符串,直到我将其保存到变量
【发布时间】:2016-05-14 03:00:13
【问题描述】:

我有一个不知道如何解释的案例: 让我烦恼的是,我打开代码,写了一些值(例如: 你付了多少钱:100 你的服务怎么样:10 有多少人共享:2)在我点击计算之前,我打开控制台。如果我写:

>bill.value
<"100"

正如预期的那样,我得到了一个字符串。但是然后我点击计算,我得到的是:

100
5

为什么是 100?为什么它突然返回数字 insted 的字符串?

最后我该如何用它做数学运算。我唯一要变成数字的是数字(bill.value)。服务和人还应该是字符串?

var button = document.querySelector("button");

var tip = document.getElementById("tip");

var total;


button.addEventListener("click", function() {

  var bill = document.querySelector("input");

  console.log(bill.value)

  var people = document.getElementById("people").value;

  var service = document.getElementsByTagName("select")[0].value;

  total = (service * Number(bill.value)) / people
  tip.textContent = total;
  console.log(total)
});
<h1>Tip Calculator</h1>

<div>How much was your bill?</div>

<label for="bill">$</label>
<input type="number" id="bill">



<div>How was your service?</div>

<select>
  <option disabled selected value="0">Choose</option>

  <option value="0.30">30% - Outstanding</option>
  <option value="0.20">20% - Good</option>
  <option value="0.15">15% - It was okaya</option>
  <option value="0.10">10% - Bad</option>
  <option value="0.05">5% - Terible</option>
</select>

<div>How many people are sharing the bill?</div>
<label>
  <input type="number" id="people">people</label>

<button>Calculate!</button>

<span id="tip"></span>

【问题讨论】:

    标签: javascript string dynamic-typing


    【解决方案1】:

    编辑:现在了解您在询问隐式转换我已经更新了我的答案。

    查看下面的代码,您会注意到product 包含一个数字值,而 sum 包含一个字符串。包含由+ 运算符分隔的两个字符串的表达式将始终导致字符串的连接(大多数期望)。

    另一方面,* 运算符对两个字符串无效,因此它会尝试将字符串转换为支持* 运算符的值,即数字。如果两个字符串都是有效的整数或浮点数,则结果是这两个数字的乘积。如果不是,则结果将为 NaN。

    var a = '2.0';
    var b = '3.0';
    
    var sum = a + b;
    var product = a * b;
    
    console.log(product); // 6.0
    console.log(sum); // "2.03.0"
    

    【讨论】:

    • 最后我怎么能用它做数学。我唯一要变成数字的是数字(bill.value)。服务和人还应该是字符串?
    • 伊戈尔,看看我附在答案中的小提琴,你会注意到我在任何算术之前都将 bill.value 和 service 转换为浮点数..
    • 嗨sheeldotme。非常感谢您的帮助。 parseFloat 似乎是一个完美的解决方案,但请帮我解释一下,也许我不明白。我感兴趣的是我的例子是如何工作的?我可以在不使用 parseFloat 或将人员和服务转换为 Number() 的情况下进行算术运算。它们仍然是字符串,但数学有效。我错过了什么?是的,我知道 1,直到我先向自己解释这一点,我才完成它。
    • 我已经更新了答案来解释为什么字符串的乘法对你有用。
    • 非常感谢,这将我推向了进一步调查的正确方向。因此,这只是使用 * 、 / 和 – 运算符(不包括 + 运算符)将字符串简单地强制转换为数字的情况。
    猜你喜欢
    • 2017-12-02
    • 2019-08-19
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2019-12-27
    • 2013-03-03
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多