如何在JS函数中否定布尔值?

7

我现在正在编写一些脚本,当我试图在函数内部否定布尔值时遇到了问题。我的意思是这个:

var test = true;

function changeThisBoolPlease(asd){
  asd=!asd;
}

alert(test);
  changeThisBoolPlease(test);
alert(test);

如果alerts为true,则为true。

有什么想法吗?JS参考文献不完美吗?

编辑:

好的,这只是我的函数的一部分:

function przesun(kolor, figury, castlings, x1, y1, x2, y2, strona) {
    kolor = nowaPozycjaKolor(kolor,x1, y1, x2, y2);
    figury = nowaPozycjaFigur(figury,x1, y1, x2, y2);
    strona = !strona;
}

实际上我无法返回这个值。怎么办?


你想返回 strona 吗?如果是,请直接返回它并分配返回值。 - robbmj
请查看我的答案,我相信它会回答你的问题。 - robbmj
修改不会改变任何东西。将函数参数的值更改只会更改函数参数的值。它对发送这些值到函数时使用的任何变量(如果有)没有影响。 - T.J. Crowder
@robbmj:当你回答问题时,原帖发布者会收到通知。这已经足够了,请不要在评论中写“看我的答案”。 - T.J. Crowder
好的,我的评论更多是为了让原帖作者知道,即使他们编辑了帖子,答案也不需要改变。 - robbmj
我不想让这个函数返回任何东西。我将strona更改为对象元素。它必须是完全动态的,因此我不会使用(由于明显的原因)“不推荐”的函数;) - adam
3个回答

4
你只是在问题中的示例中更改了asd的值。尝试这样做。
var test = true;

function changeThisBoolPlease(asd){
    return !asd;
}

alert(test);
test = changeThisBoolPlease(test);
alert(test);

或者,不推荐的方式是按照以下方法操作

var test = true;

function changeTestBoolPlease(){
    test = !test;
}

alert(test);
changeTestBoolPlease();
alert(test);

2

对象不是通过引用传递,而是通过值传递,这个值是一个引用的副本...

在您的示例中,您甚至没有传递对象,而是一个原始值类型。

如果您想要一个引用,那么您需要将其包装在对象元素中,如下所示:

var test = { val: true };

function changeThisBoolPlease(asd){
    asd.val=!asd.val;
}

alert(test.val);
changeThisBoolPlease(test);
alert(test.val);

1
“它不是通过引用传递,而是通过值传递,这个值是一个引用…” 不,这个值是一个布尔值,不是一个引用。 - T.J. Crowder
是的,在这种情况下你是正确的,但我假设 true 只是一个例子(实际上确实如此),而他传递的是一个对象。已编辑。 - Adassko

1
这是一个作用域问题。只需要返回并设置:

var test = true;

function changeThisBoolPlease(asd){
    return !asd;
}

alert(test);
test = changeThisBoolPlease(test);
alert(test);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接