切换布尔变量(已应用)

时间:2014-03-03 21:06:19

标签: javascript jquery html boolean

我正在尝试制作一个游戏(俗气,我知道)并且考虑到我对javascript / jquery并不是那么好,我已经设法变得难以切换布尔变量。我尝试了整个var =!var(不知道这意味着什么),但有人推测它只适用于目标C(再次,不知道)。我已经制作了一个JS小提琴http://jsfiddle.net/clarinetking/mLG6c/1/并且它现在可以正常工作但是我想在我的所有对象中添加一个名为'equip'的变量并让它从false开始并在按下正确的按钮时切换为true

var sword = {
nam:'Sword',
atk:5,
def:1,
spd:-1,
type:'LeftH',
//equip = false  
};

switch ( $(this).attr('id') ) {
        case 'equipsword':
            atk += sword.atk;
            def += sword.def;
            spd += sword.spd;
            //insert equip switch here
            break;

2 个答案:

答案 0 :(得分:1)

是的!在javascript中运行,而不仅仅是C,!是NOT运算符,它基本上与前面的任何内容相反,所以:

!true === false
!false === true

这也适用于truthy / falsy值:

!null === true
!0 === true
!15 === false
!"" === true

所以要切换一个布尔值,只需使用以下内容:

var sword = {
   nam:'Sword',
   atk:5,
   def:1,
   spd:-1,
   type:'LeftH',
   equip:false  
};    
switch ( $(this).attr('id') ) {
    case 'equipsword':
        atk += sword.atk;
        def += sword.def;
        spd += sword.spd;
        sword.equip = !sword.equip;
        break;

但是因为来自它的外观的'equipsword'只会在装备时触发,而不是仅仅sword.equip = true;装备,特别是因为某些其他代码可能会改变其值equip,然后如果在触发equipsword案例之前运行以下代码,则切换将无法按预期工作:

function someFunctionThatGetsCalled(){
   sword.equip = true;
}

它会导致装备成为真,然后当装备剑的情况被触发时,sword.equip将变为假,因为它使用!sword.equip切换。

答案 1 :(得分:1)

你需要做的不仅仅是!bool在这里,你也想要扭转统计变化。例如:

        if (sword.equip) {
            atk -= sword.atk;
            def -= sword.def;
            spd -= sword.spd;
        }
        else {
            atk += sword.atk;
            def += sword.def;
            spd += sword.spd;
        }
        sword.equip = !sword.equip;

http://jsfiddle.net/mLG6c/2/

注意,您可能会重构此代码,因此您不需要switch语句,因为您对每个设备执行的操作是相同的。