【问题标题】:Javascript: Use a function to change variables to true/falseJavascript:使用函数将变量更改为真/假
【发布时间】:2019-07-29 04:13:50
【问题描述】:

我在函数中使用布尔 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;
     }
}

我希望这个函数例如检查变量“动物”是否为false,然后它应该转向true。如果true,则转至false

每当我尝试这个时,它总是转向true,永远不会回到false。变量category 似乎不会影响我的变量animalfoodthing。它只会将category 更改为true,就像它是一个新变量一样。

【问题讨论】:

  • 你只是改变了局部变量category。但是您不会返回该值或将其存储在任何地方。该函数对任何东西都没有实际影响。

标签: javascript function variables boolean


【解决方案1】:

在这种情况下,您肯定必须返回,因为您所做的更改只是函数范围的局部。但我的方法将是通过使用对象来使用小更改的更好方法:

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 切换布尔值。

【讨论】:

    【解决方案2】:

    在 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>

    【讨论】:

    • 哇...类似的。
    猜你喜欢
    • 2012-09-24
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多