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。变量的类型是使用它的值推导出来的。
如果要将变量totAmt
和n_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
只会得到这些小数的整数部分。您还应该使用 parseFloat
、Number
或一元运算符 +
来解析小数部分。此外,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);
我只是想查看带小数的数字变量的总数,但它不起作用。我的平台是 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。变量的类型是使用它的值推导出来的。
如果要将变量totAmt
和n_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
只会得到这些小数的整数部分。您还应该使用 parseFloat
、Number
或一元运算符 +
来解析小数部分。此外,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);