簡體   English   中英

Uncaught typeError:無法讀取未定義的屬性-對象

[英]Uncaught typeError: Cannot read property of undefined - object

我不認為我的腳本正在標識對象,而且我不確定為什么。

我從以下數據結構開始:

var state;
var init = function() {
    state = {
        runInfo: { 
            price: null,
            containers: null,
            servings: null
        },
        formula: [],
        totalsServing: [],
        totalsBottle: [],
        totalsRun: []
    };
};

然后將對象添加到“公式”數組中:

var addIngredient = function(name, amount, carrier, usdperkilo, origin, packSize) {
        var ingredient = {
            name: name,
            amount: amount,
            carrier: carrier,
            usdperkilo: usdperkilo,
            origin: origin,
            packSize: packSize
        };

        state.formula.push(ingredient);
    };

這一切都很好。 但是,當我創建另一個函數來操縱“ Formula”數組中的對象時,使用此函數會收到“ Uncaught TypeError:無法定義未定義的屬性'carrier'”:

addSection3Row = function(ingredient) {
        var ingredient = state.formula[ingredient].name;
        var carrier = (state.formula[ingredient].carrier/100)*(state.formula[ingredient].amount/(1-(state.formula[ingredient].carrier/100)));
        var amount = state.formula[ingredient].amount;

      var row = {
            ingredient: ingredient,
            carrier: carrier,
            amount: amount,
            totalAmount: carrier + amount
        };

        state.totalsServing.push(row);
    };

我已經看過其他問題,帶有此錯誤消息,該問題通常似乎是javascript尚未定義變量。

我懷疑這也是我的情況,但我不明白為什么。

我在頁面底部的html下面運行以下代碼:

init();
addIngredient("St. John's Wort", 500, 4, 25, true, 25);
addIngredient("5-HTP", 100, 2, 165, true, 25);
addSection3Row(0);
console.log(state); 

當我在控制台中運行以下代碼時:

(state.formula[ingredient].carrier/100)*(state.formula[ingredient].amount/(1-(state.formula[ingredient].carrier/100)))

它返回正確的值。 所以我知道我的腳本中有一些東西禁止js訪問對象,但是我不確定為什么。

在addSection3Row函數中,您將覆蓋第一行中的成分。

addSection3Row = function(ingredient) { //ingredient is number

        var ingredient = state.formula[ingredient].name;//ingredient is string
        var carrier = (state.formula[ingredient].carrier/100)*(state.formula[ingredient].amount/(1-(state.formula[ingredient].carrier/100)));
        var amount = state.formula[ingredient].amount;

      var row = {
            ingredient: ingredient,
            carrier: carrier,
            amount: amount,
            totalAmount: carrier + amount
        };

        state.totalsServing.push(row);
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM