Javascript 如果我比较数字并将结果赋给一个新变量,为什么JS返回NaN?
基本上,我在处理非常简单的数据方面有困难。当我运行以下代码时,它返回Javascript 如果我比较数字并将结果赋给一个新变量,为什么JS返回NaN?,javascript,Javascript,基本上,我在处理非常简单的数据方面有困难。当我运行以下代码时,它返回NaN,而不是分配给max的新编号 let Bought = [eurBought, usdBought, jpyBought, gbpBought, cadBought, audBought, chfBought]; let Sold = [eurSold, usdSold, jpySold, gbpSold, cadSold, audSold, chfSold]; maxBought = Math.max(...Bough
NaN
,而不是分配给max
的新编号let Bought = [eurBought, usdBought, jpyBought, gbpBought, cadBought, audBought, chfBought];
let Sold = [eurSold, usdSold, jpySold, gbpSold, cadSold, audSold, chfSold];
maxBought = Math.max(...Bought);
console.log(typeof(maxBought));
// returns `number`
maxSold = Math.max(...Sold);
console.log(typeof(maxSold));
// returns `number`
let max;
if(maxBought > maxSold) {
max = maxBought;
} else {
max = maxSold;
}
console.log(max)
// returns `NaN`
对我来说,当我按下..中的数字时,JS没有理由返回NaN
。我还尝试了
parseFloat
maxbund
和maxsall
,但它仍然返回NaN
编辑至@宽恕评论:我在AJAX函数中使用几个逻辑操作一个JSON文件。 我为其中一个数组变量
eurbuid
添加了代码
let resultBought = {};
let resultSold = {};
for (var i = 0; i < tradesTotal; i++) {
symbol = trades[i].fields.orderSymbol;
// returns e.g. EUR/USD
symbolBase = symbol.slice(0, 3);
// returns e.g. EUR
symbolCounter = symbol.slice(3, 6);
// returns e.g. USD
lots = trades[i].fields.orderLots;
lots = Number(lots);
// returns e.g. 1.00
orderType = trades[i].fields.orderType;
// orderTypes 0, 2, 4 are long trades, 1, 3, 5 shorts accordingly
// check for major pairs where XXX/YYY = defined currencies
if (symbolBase.match(/^(EUR|GBP|AUD|CHF|JPY|USD|CAD)$/) && symbolCounter.match(/^(EUR|GBP|AUD|CHF|JPY|USD|CAD)$/)) {
if (orderType === '0' || orderType === '2' || orderType === '4') {
// Base currency
if(resultBought.hasOwnProperty(symbolBase + 'VolumeBought')) {
resultBought[symbolBase + 'VolumeBought'] += Number(lots * 100.000);
}
else [...]
}
}
}
// Update Chart.JS Trade Volume Chart with new data set here
var eurBought = resultBought.EURVolumeBought;
let resultbull={};
让resultSold={};
对于(var i=0;i
我将再次检查每个变量。最初我认为我使用两个
数字
,因此数组中的其他变量不再重要。以下代码输出8,与预期一样,当购买和出售的是数字数组时
bund=[1,2,3,4];
售出=[2,4,6,8];
maxbunded=Math.max(…bunded);
console.log(typeof(maxbund));
//返回`数字`
maxsall=Math.max(…已售出);
console.log(typeof(maxsell));
//返回`数字`
让马克斯;
如果(MaxBund>MaxSeld){
max=maxbund;
}否则{
max=maxsall;
}
console.log(max)
购买的和出售的的值是多少?NaN
是一个数字
。准确显示购买和出售的值是多少。你现在给出的信息是混合的。只需控制台。记录购买和出售的值,你可能会看到你的问题。好吧,phanti的解决方案实际上只是掩盖了问题。理想情况下,您应该去修复导致值未定义的任何内容。或者,如果这是一种允许的情况,您可以按照建议过滤该值,并确保您清楚该场景中的预期结果(例如,用户是否应该知道某个值不可用,或其他什么?),这意味着问题出在别处,而不在发布的代码中。@Salman,问题在于发布的代码。如果售出的的第一个元素是NaN
,则得到的结果是OP is talkingabout@TKoL如果您看到问题的最新编辑,很明显,数组中的值实际上是分配到其他位置的变量。因此,如果它们被错误地分配,那么问题就发生在发布的代码之外。@ADyson但是,如果代码应该适当地处理NaN值,而不是将其作为最大值输出,那么问题仍然存在于代码中posted@TKoL但没有迹象表明它是为了“适当地处理NaN”,也没有意图这样做。事实上,OP的措辞表明,他们并不期望这种情况发生,也不理解它是如何发生的。