javascript - Vue.js - 值是连接而不是相加

标签 javascript vue.js

我有一个使用 Vue.js 的应用程序。该应用程序只有一个项目列表。每件商品都有一个价格。我想计算列表中所有项目的总数。该列表可能会发生变化,并且在某些情况下,将来自网络服务。所以,我想使用一个观察者。不过,在计算总数时,奇怪的事情发生了。

而不是将每个项目的成本加在一起。看起来这些值正在串联起来。因此,如果第一个项目的成本为 0.76,第二个项目的成本为 2.18,则结果为“00.762.18”。您可以在这个 Fiddle 中亲自查看结果。我的 Vue 定义如下:

new Vue({
  el: '#myApp',
  data: {
    list: [
      { name: 'Golf Ball', cost: 3.49 },
      { name: 'Tennis Ball', cost: 0.75 }
    ],
    total: 't.b.d'
  },
 watch: {
   list: function() {
     this.updateTotal();
   }
 },  
  methods: {
    updateTotal: function() {
      this.total = 0.0;
      for (var i=0; i<this.list.length; i++) {
        console.log('cost: ' + this.list[i].cost);
        this.total += this.list[i].cost;
      }
      console.log(this.total);
    },

    setCosts: function() {
      for (var i=0; i<this.list.length; i++) {
        var d = Math.floor(Math.random() * 3);
        var c = Math.floor((Math.random() * 99)) / 100;

        var item = this.list[i];
        item.cost = (d + c).toFixed(2);
        Vue.set(this.list, i, item);                                          
      }      
    }
  }
})

我不明白为什么会发生这种情况。您可以通过单击“设置项目成本”按钮来重复查看它的发生。就像 Vue 将总计视为字符串,但是,如 updateTotal 函数所示,我将其设置为数字。即使 total 用数字初始化,它仍然将其视为字符串。我做错了什么?

最佳答案

setCosts 方法中调用 toFixed() 会返回一个字符串。因此,您要添加两个字符串,从而生成一个连接字符串。

如果您希望将 item.cost 作为数值,则可以使用 unary plus像这样:

item.cost = +((d + c).toFixed(2));

关于javascript - Vue.js - 值是连接而不是相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665942/

相关文章:

vue.js - 为什么 filter() 中的 `this` 在 VueJS 中未定义?

javascript - 如何在 ionic 复选框中使用 ngModel?

javascript - 在不会永远运行的脚本中关闭 Mongoose 连接

javascript - 这个混淆的 javascript 代码是如何工作的?

javascript - Chrome 扩展破坏了 DOM

javascript - 使用 Vue 和 HTML 在 JavaScript 中制作幻灯片,但图像出现错误 404 "Not found"

javascript - 如何添加带有独立 router.js 文件的 Vuetify 选项卡?

typescript - vuejs 计算属性和模板调试有什么好办法吗?

jquery - 在 Ajax 函数中访问 Vue.js 组件属性

javascript - 调用函数和命名空间 - JavaScript