Javascript: используйте функцию для изменения переменных на true / false - PullRequest
0 голосов
/ 07 марта 2019

У меня проблемы с использованием логического True / False в моей функции.

HTML:

<a onclick="selectCategory(animal);">Animal</a>
<a onclick="selectCategory(food);">Food</a>
<a onclick="selectCategory(thing);">Thing</a>

Javascript:

var animal = false;
var food = false;
var thing = false;

function selectCategory(category)
{
     if(category != true)
     {
          category = true;
     }
     else
     {
          category = false;
     }
}

Я хочу, например, чтобы эта функция проверяла, является ли переменная "animal" false, тогда она должна повернутьсядо true.Если true, тогда переходите к false.

Когда бы я ни пытался это сделать, он всегда поворачивался к true, никогда не возвращался к false.Переменная category, похоже, не влияет на мои переменные animal, food и thing.Изменяется category на true, как будто это новая переменная.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Вы определенно должны вернуться в этом случае, так как изменения, которые вы делаете, являются локальными для области действия функции.Но мой подход будет лучшим способом использовать небольшое изменение, используя объекты:

var myConfig = {
  animal: false,
  food: false,
  thing: false
};

function selectCategory(which) {
  myConfig[which] = !myConfig[which];
  console.log(myConfig);
}
<a href="#" onclick="selectCategory('animal'); return false;">Animal</a>
<a href="#" onclick="selectCategory('food'); return false;">Food</a>
<a href="#" onclick="selectCategory('thing'); return false;">Thing</a>

Несколько моментов, которые следует запомнить:

  • Использование объекта не приведет к загрязнению глобальной области видимости.
  • Вы не можетепередать переменные в качестве параметров, где вы хотите изменить исходный.Передается по значению, а не по ссылке.
  • Используйте return false и задайте href для совместимости.
  • Используйте myVar = !myVar для переключения логического значения.
0 голосов
/ 07 марта 2019

Переназначение примитива (или вообще любой переменной) само по себе ничего не изменит в 99% случаев. Вместо этого используйте объект, содержащий логические значения, передайте имя свойства и переназначьте свойство для объекта:

const obj = {
  animal: false,
  food: false,
  thing: false
};
function selectCategory(category){
  obj[category] = !obj[category];
  console.log(obj);
}
<a onclick="selectCategory('animal');">Animal</a>
<a onclick="selectCategory('food');">Food</a>
<a onclick="selectCategory('thing');">Thing</a>
...