javascript对象属性类型只接受数字

时间:2017-11-28 08:36:36

标签: javascript json object model-view-controller types

我发出一个Ajax Post请求,将Javascript对象作为Json参数发送到MVC操作:

 var productName, exchangeName, productCode, stockCode;
 var categoryID, brandID, stockAmount, state, shippingWeight;

 var sendinfo = 
            {
                "pcb": {
                    "ProductViewModel": {
                        "ProductName": + $('#ProductViewModel_ProductName').val()
                        "ProductCode": + $('#ProductViewModel_ProductCode').val(),
                        "StockCode": +$('#StockViewModel_StockCode').val(),
                        "StockAmount": +$('#StockViewModel_StockAmount').val(),
                        "ShippingWeight": +$('#ProductViewModel_ShippingWeight').val(),
                        "State": +state
                    },
                    "CategoryViewModel": { "Kategori": +categoryID },
                    "BrandViewModel": { "BrandName": +brandID },
                    "ExchangeViewModel": { "ExchangeName": +exchangeName }
                }
            };

我的问题是关于这些属性的类型。有些是作为字符串输入,但是这个对象只接受数字(我看到当我悬停在pcb上时),当我输入字符串而不是数字时输出null。为什么会这样?

我尝试将属性逐个转换为:

string($('#StockViewModel_StockCode').val())

并尝试了JSON.stringify(),但在此对象中无效...

1 个答案:

答案 0 :(得分:0)

  

为什么会这样?

因为代码明确地告诉它,使用一元+

"ProductName": + $('#ProductViewModel_ProductName').val()
// ------------^

"CategoryViewModel": { "Kategori": +categoryID }
// --------------------------------^

等等。

当您将一元+应用于字符串时,它会被强制转换为数字。如果无法将其识别为有效数字,则结果为NaN。 (您已经说过,您已经看到null了,这表示您在某些时候,系列化为JSON; NaN在序列化时转换为null作为JSON,因为JSON没有NaN值。)

如果您需要字符串,请从产生相关属性的代码中删除+