т.е. выдает "... is null or not object" ошибки при доступе к объекту? - PullRequest
0 голосов
/ 18 декабря 2010

У меня есть литерал объекта JavaScript:

var things = {
    "a": {
        7: {
            "b": "asdf",
            "z": {
                1: {
                    "name": "Ship0",
                    "loa": 100,
                    "draft": 5000
                },
                2: {
                    "name": "Ship1",
                    "loa": 100,
                    "draft": 5000
                }
            }
        },
        8: {
            "b": "fdsa",
            "z": {
                5: {
                    "name": "Ship0",
                    "loa": 100,
                    "draft": 5000
                },
                6: {
                    "name": "Ship1",
                    "loa": 100,
                    "draft": 5000
                }
            }
        }
    }
};

... и позже в функции я делаю это:

function p_get_index_of_existing_ship(customer_id, ship_id)
{
    return someotherfunctionof(ship_id, things["a"][customer_id]["z"]);
}

Это хорошо работает в Firefox, но в IE (7,8) я получаю сообщение об ошибке: "things.a [...]. Z 'равно нулю или не объект.

Разве это не правильный способ доступа к таким ассоциативным массивам (объектам) в javascript?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Ключи литералов объекта должны быть действительными именами идентификаторов. Ваши ключи - 7 и 8, которые не являются допустимыми именами (поскольку первый (и единственный) символ является цифрой). Вместо этого я предлагаю использовать строки:

"7": { ... }

Редактировать: Я посмотрел спецификацию ... Кажется, числовые литералы являются допустимыми именами ключей ... но все же может быть, что IE их не любит. Попробуйте строки, и вы будете знать.

Редактировать: Попробуйте это:

function p_get_index_of_existing_ship(customer_id, ship_id)
{
    // return someotherfunctionof(ship_id, things["a"][customer_id]["z"]);
    things["a"][customer_id]["z"];
}

Ошибка все еще отображается в IE?

0 голосов
/ 18 декабря 2010

Проблема в том, что ...[customer_id] оценивается как неопределенное.

Теперь выясните, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...