ColdFusion 中的类型化数组与非类型化数组

Typed array vs untyped array in ColdFusion

我有以下代码:

<cfscript>
data = ['2342bas', 'asqwerewq', '12314', 12421, 1.1];

newdata = arrayNew['Numeric'](1);

for (item in data)  {
    newdata.append(val(item));
    }

writedump(newdata); 


newdata = [];

for (item in data)  {
    newdata.append(val(item));
    }

writedump(newdata);  
</cfscript>

我得到以下结果:

我想知道为什么它们不同。 'Number' 是否强制所有数据为浮点数?

ColdFusion 通常将数值作为 java.lang.Double 数据类型。作为追加的一部分,它可能会将每个值转换为 java.lang.Double

为了得到答案,我不得不深入研究元数据

<cfscript>
data = ['2342bas', 'asqwerewq', '12314', 12421, 1.1];

newdata = arrayNew['Numeric'](1);

for (item in data)  {
    newdata.append(val(item));
    }

newdata.each(function(value) {
    writeoutput("<br /><b>#value#</b> #getMetadata(value).getName()#");
    });

writeoutput("<hr />");


newdata = [];

for (item in data)  {
    newdata.append(val(item));
    }

newdata.each(function(value) {
    writeoutput("<br /><b>#value#</b> #getMetadata(value).getName()#");
    });
</cfscript>

结果

有趣的是,BigDecimal 总是有一个小数点,而 Double 可能有也可能没有。基于这个问题,ColdFusion: Get variable type,我从来不知道他们是在 ColdFusion 中使用 BigDecimal 的方法。