Проверьте, установлен ли элемент массива в JS

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

26
задан Kevin Reid 10 April 2010 в 12:05
поделиться

6 ответов

Используйте ключевое слово в , чтобы проверить, определен ли атрибут в объекте

if (assoc_var in assoc_pagine)

ИЛИ

if ("home" in assoc_pagine)

Здесь довольно много проблем.

Во-первых, предполагается ли, что var переменная имеет значение «дом», «работа» или «около»? Или вы хотели проверить фактическое свойство под названием «var»?

Если var предполагается переменной со строковым значением, обратите внимание, что var - зарезервированное слово в JavaScript, и вам нужно будет использовать другое имя, например assoc_var .

var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example

Если вы хотели проверить свойство под названием «var», вам просто нужно поместить его в кавычки.

assoc_pagine["var"]

Тогда undefined не то же самое, что «undefined» . Вам понадобится typeof , чтобы получить строковое представление типа объекта.

Это разбивка всех шагов.

var assoc_var = "home"; 
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"

Итак, чтобы исправить вашу проблему

if (typeof assoc_pagine[assoc_var] != "undefined") 

update: Как указывали другие ответы, использование массива не является лучшим решением этой проблемы. Вместо этого рассмотрите возможность использования объекта .

var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
53
ответ дан 28 November 2019 в 06:16
поделиться

Это не Массив. Лучше объявите это так:

var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;

или

var assoc_pagine = {
                 home:0,
                 about:1,
                 work:2
               };

Чтобы проверить, содержит ли объект какую-либо метку, вы просто делаете что-то вроде этого:

if('work' in assoc_pagine){
   // do your thing
};
3
ответ дан KooiInc 10 April 2010 в 12:05
поделиться
if (assoc_pagine.indexOf('home') > -1) {
   // we have home element in the assoc_pagine array
}

Mozilla indexOf

1
ответ дан Valeriu Vodnicear 10 April 2010 в 12:05
поделиться
function isset(key){
ret = false;
array_example.forEach(function(entry) {
  if( entry == key ){
    ret = true;
  }
});
return ret;
}

alert( isset("key_search") );
0
ответ дан ProgramFOX 10 April 2010 в 12:05
поделиться
var assoc_pagine = new Array();
assoc_pagine["home"]=0;

Не используйте для этого массив . Массивы предназначены для списков с числовым индексом. Просто используйте простой объект ( {} ).

То, о чем вы думаете со строкой 'undefined' , вероятно, таково:

if (typeof assoc_pagine[key]!=='undefined')

Это (более или менее) то же самое, что сказать

if (assoc_pagine[key]!==undefined)

Однако в любом случае это немного некрасиво . Вы разыменовываете ключ, который может не существовать (что было бы ошибкой для любого более разумного языка), и полагаетесь на странный прием JavaScript, который дает вам специальное значение undefined для несуществующих свойств.

Это также не совсем говорит вам, действительно ли свойство не было там, или оно было там, но явно установлено на значение undefined .

Это более явный, читаемый и лучший подход IMO:

if (key in assoc_pagine)
14
ответ дан 28 November 2019 в 06:16
поделиться

var - это оператор... поэтому это зарезервированное слово... Так что просто назовите его по-другому. И это лучший способ сделать это (=== лучше, чем ==)

if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
7
ответ дан 28 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: