javascript - 移动 JavaScript 与桌面 JavaScript 不同吗?

标签 javascript jquery

听起来很疯狂,我知道。但是我遇到了一个奇怪的数学/数组相关错误,该错误只发生在手机上。

这可能是一个 jQuery 错误,但我不确定。

当我注意到一个项目不断返回 NaN 时,我正在做一些数字运算,特别是数组中的第一个项目。

var taxBrackets = {
  //if this number or higher
  0: 0.95, //5%
  1950000: 0.90, //10%
  3300000: 0.80, //20%	
  6950000: 0.77, //23%
  9000000: 0.67, //33%
  18000000: 0.60, //40%
  40000000: 0.55, //45%
};
var exp = [
  30000, //rent
  1098, //phone
  5143, //wifi
  15000, //commuter pass
  1500, //health
];


function calculate(hoursPerWeek, daysPerWeek, trainFare, wage) {
  data = [];
  var taxRate = 1;
  data['total'] = Math.floor(wage * hoursPerWeek * 4);
  data['tax'] = data['total'] * 12;
  for (key in taxBrackets) {
    if (data['tax'] < key) {
      break;
    }
    taxRate = taxBrackets[key];
  }


  data['total'] = data['total'] * taxRate;
  data['total'] = data['total'] + (daysPerWeek * 4 * (trainFare * 2));
  data['monthly'] = data['total'];
  data['yearly_total'] = data['total'] * 12;

  for (var n = 0; n < exp.length; n++) {
    data['monthly'] = data['monthly'] - exp[n];
  }
  data['weekly'] = Math.floor(data['monthly'] / 4);
  data['daily'] = Math.floor(data['monthly'] / 30);
  data['taxRate'] = Math.round((1 - taxRate) * 100) + "%";
  return data;
}
res = calculate(24, 3, 480, 1000);

for (let key in res) {
  console.log(key, res[key])
}

无论如何,你可以在这里自己看看。 https://jsfiddle.net/frogg616/vg6r0v4g/

税率为5%的图表在手机上显示为NaN,但在电脑上显示。(在iPhone SE iOS 10和iPhone 5S iOS 9上测试)

那么,我的问题是移动 JavaScript 和计算机 JavaScript 有什么不同吗?如果是这样,我在哪里可以找到有关它们差异的更多信息?

最佳答案

您的问题是 Javascript 对象中的键没有排序。处理案例的顺序不是由语言定义的,因此不能保证 5% 的括号会在其他括号之前被检查。如果没有为 taxRate 赋值,它将是 undefined,对其执行任何进一步的算术运算将导致 NaN 结果。

(这并不特定于桌面浏览器与移动浏览器。碰巧您使用的桌面浏览器的行为与 iOS 上的 Safari 不同。)

不要为此使用对象。使用一系列 ifelse 语句,例如

if (income < 1950000)
  taxRate = 0.95;
else if (income < 3300000)
  taxRate = 0.90;
...
else
  taxRate = 0.55;

关于javascript - 移动 JavaScript 与桌面 JavaScript 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761633/

相关文章:

Javascript:如何将对象数组转换为具有排序的唯一数组的对象?

javascript - Error().stack 在 Cordova iOS 中未定义,但适用于 Android?

javascript - 如何将数据传递到 JQuery 脚本

Javascript灯箱未捕获类型错误: $ is not a function

javascript - 使用 javascript oop 减少代码重复

javascript - 如何在 Chart.JS 条形图中最后一个条形上方添加标签?

javascript - 如何使用 javascript 或 Jquery 获取 IE 浏览器的文件大小?

jquery - 如何从 rails 中的 Controller 调用方法?

javascript - 如何使用日期时间选择器添加警报

jquery - JQuery的hide()和slideDown()/slideUp()有什么区别?