function Number() { [native code] } JavaScript 错误

function Number() { [native code] } Error in JavaScprit

我只是想查看带小数的数字变量的总数,但它不起作用。我的平台是 Oracle Apex 20.2

var model = apex.region("itemig").widget().interactiveGrid("getViews", "grid").model;
console.log(model);
var amtKey = model.getFieldKey("ORAN");
//console.log(amtKey);
var totAmt = 0;
model.forEach(function(r) {
    var n_amount = parseInt(r[amtKey], 10);

    totAmt += n_amount;
    console.log(n_amount);
});

    $s('P705_TOTALORAN',totAmt);


输出为:

function Number() { [native code] }100507580901124105

我想要的是得到totAmt中带小数的数字的数量。由于这个本机代码,我不会走得太远。有人可以告诉我它是什么吗?希望更重要的是我可以在我的工作中完成这部分?

Javascript 不是 typed language。变量的类型是使用它的值推导出来的。

如果要将变量totAmtn_amount声明为数字类型,则应使用var/let并为它们分配一个数字:

var totAmt = 0;           // these two variables contain numbers..
var n_amount = 0;         // .. so they are of type "number"

否则,如果您这样做 var totAmt = Number;,您只是在分配全局对象 Number,它是数字对象的本机构造函数,当您使用 + 运算符添加它时对于另一个变量,将调用该构造函数的 toString 并生成字符串 "function Number() { [native code] }" 然后将其连接到您的其他数字:

console.log(Number.toString());

console.log(Number + 5);

注1:如果你想让totAmt显示为小数点后2位,那么在显示前使用toFixed

$s("P705_TOTALORAN", totAmt.toFixed(2));

注2:如果值r[amtKey]是小数,那么parseInt只会得到这些小数的整数部分。您还应该使用 parseFloatNumber 或一元运算符 + 来解析小数部分。此外,forEach 可以替换为 reduce 以缩短代码,如下所示:

var totAmt = model.reduce(function(sum, r) {
  return sum + Number(r[amtKey]);               // Number will keep the decimal part of the number, whereas parseInt will only get the whole-number part
}, 0);

$s('P705_TOTALORAN', totAmt.toFixed(2));

var totAmt = Number;所做的是将totAmt设置为文字函数Number,它并没有告诉JS totAmt应该是一个数字。

如果您随后向其添加另一个数字,它会使用 totAmt.toString() 方法,该方法只是 returns function Number() { [native code] } 并将数字 n_amount 作为字符串连接到它.

当您删除重复的变量声明时,此代码将起作用:

var totAmt = 0;
model.forEach(function(r) {
    var n_amount = parseInt(r[amtKey], 10);

    totAmt += n_amount;
    console.log(n_amount);
});

此外,如果你在数组中添加数字,JS 有 Array#reduce() 方法,它使你的代码更简洁:

let totAmt = model.reduce((acc,cV)=>acc+cV[amtKey],0);