如何在javascript中更改函数内的Bool值?

如何在javascript中更改函数内的Bool值?,javascript,reference,boolean,Javascript,Reference,Boolean,基于本教程: 下面是我的示例代码: function modifyVar(obj, val) { obj.valueOf = obj.toSource = obj.toString = function(){ return val; }; } function setToFalse(boolVar) { modifyVar(boolVar, 'false'); } var isOpen = true; setToFalse(isOpen); console.log('isOpen '

基于本教程:

下面是我的示例代码:

function modifyVar(obj, val) {
  obj.valueOf = obj.toSource = obj.toString = function(){ return val; };
}

function setToFalse(boolVar) {
  modifyVar(boolVar, 'false');
}

var isOpen = true;
setToFalse(isOpen);
console.log('isOpen ' + isOpen); 
如何更改函数中的bool变量值? 是否可以通过引用传递布尔值?
提前感谢

我不确定,但您在单引号中赋值为false,带单引号/双引号的值将被视为字符串。只需使用modifyVar(boolVar,false);然后再试。

您正在传递布尔基元变量
isObject
。对于基元类型,尝试设置
toString
方法是没有意义的,因为它不需要(也不使用),因为在ECMAScript规范中已经为它定义了规则

如果您确实想像您正在尝试的那样使用
modifyVar
函数,您可以使用布尔对象而不是基元:

function modifyVar(obj, val) {
  obj.valueOf = obj.toSource = obj.toString = function(){ return val; };
}

function setToFalse(boolVar) {
  modifyVar(boolVar, 'false');
}

var isOpen = new Boolean(true);
setToFalse(isOpen);
console.log('isOpen ' + isOpen); 

因此答案是:使用
newboolean(true)
Object(true)

有几个问题:

  • 'false'
    不是
    false

  • 在JavaScript中,变量通过值传递。总是。因此,在
    setToFalse
    中的
    boolVar
    和您要传递到它的
    isOpen
    之间没有任何联系
    setToFalse(isOpen)
    的处理方式如下:

    • 已确定
      isOpen
      的值

    • 该值(与
      isOpen
      完全断开)被传递到
      setToFalse

  • JavaScript对基本类型有一些有趣的处理:如果您尝试像对象类型一样使用它们(
    var a=42;a.toFixed(2);
    ),值将被提升为临时对象,使用该对象,然后丢弃该对象。因此,如果
    obj
    false
    obj.anything=“whatever”
    最终将成为no-op,因为临时存在的对象将在行结束后立即释放

  • 您可以通过
    new Boolean
    isOpen
    升级到一个对象,这样做与您正在做的事情类似,但是请注意,它将像一个对象一样工作,而不是布尔值:

    函数修改变量(obj,val){
    obj.valueOf=obj.toSource=obj.toString=function(){return val;};
    }
    函数setToFalse(布尔瓦尔){
    modifyVar(boolVar,false);
    }
    var isOpen=新布尔值(真);//物件
    setToFalse(等参);
    log('isOpen'+isOpen)
    
    
    
    我们可以使用它

    var myBoolean = { value: false }
    
    //get
    myBoolean.value;
    
    //set
    myBoolean.value = true;
    

    不可能。在javascript中,标量参数(如布尔值)通过值传递给函数。所以不能在函数内部更改外部变量。但是你可以从函数中返回新的值,并用它来改变函数外的变量伟大的答案我学到了很多!但是如果我想检查If语句中的isOpen值,我应该怎么做呢?好的,我发现它。。。我需要在if语句中使用valueOf()方法。感谢您像var changeBool=function(obj,prop,value){obj[prop]=value;}var-sampleObj={someBool:true};changeBool(sampleObj,'someBool',false);console.log(sampleObj.someBool);有人能比较一下被接受的和这个的区别吗?