【问题标题】:Can't store a boolean returned by a function in a variable [duplicate]无法将函数返回的布尔值存储在变量中[重复]
【发布时间】:2015-04-22 16:05:03
【问题描述】:

我不知道这是否是一个错误,但感觉有点奇怪。您可以使用javascript将函数返回的布尔值存储在变量中吗?每当我尝试将布尔值存储在函数返回的变量中时,它都会更改为字符串。

我有以下函数将字符串转换为布尔值

function str2bool(strvalue){
  console.log("Value is - " + strvalue);
  console.log("Type is - " + typeof strvalue);
  return (strvalue && typeof strvalue == 'string') ? (strvalue.toLowerCase() == 'true') : (strvalue == true);
}

我在 StackOverflow 上的某个地方找到了这个函数,但我不记得它的作者,所以如果你正在阅读这篇文章,抱歉我没有给出适当的学分:)

我有另一个 javascript 行,如下所示:

target.prop('disabled',str2bool(booleanInStringFormat));
console.log("Typeof str2bool return is - " + typeof str2bool(booleanInStringFormat));

如果我以这种方式使用它,一切正常,str2bool 函数将以下行返回到控制台:

值为 - 假
类型为 - 字符串

而主函数返回后的那一行:

str2bool 函数的类型是 - boolean

但是如果我尝试将 str2bool 的返回值存储在一个变量中,然后再使用它,prop 函数将不起作用,因为显然我用来存储 str2bool 的返回值的变量变成了一个字符串。如果我运行此代码,我会得到以下结果:

status = str2bool(booleanInStringFormat);
console.log("Typeof status is - " + typeof status);
target.prop('disabled',status);

结果如下:

值为 - 假
类型是 - 字符串
状态类型为 - 字符串
最终结果是目标仍处于禁用状态

那么,为什么我存储函数返回的变量的typeof改回了string呢?

【问题讨论】:

  • 是的,这是隐式字符串转换。 某事 + 字符串 == 字符串。总是(大部分时间)。
  • 但最终结果中没有添加任何内容...
  • 好吧,也许我误会了……随便。

标签: javascript


【解决方案1】:

因为你使用了全局变量status,它似乎是全局对象window的一个属性,所以这个属性只能是字符串

window.status

您可以更改为其他变量名,但最好避免使用全局变量。

(function(){
  var status = str2bool('false');
  console.log(typeof status);
}());

【讨论】:

  • 是的,这就是问题所在...感谢您的及时回答!:) btw 的全局状态变量是什么?谢谢:) 将在几分钟内将其标记为正确:)
  • @AdamBaranyai 用于设置浏览器底部状态栏的文字。
【解决方案2】:

尝试了下面的sn-p,看来我们可以返回一个布尔值并保存它

function booleanReturnCheck(){
   return false;
}

var isBool = booleanReturnCheck();
console.log(isBool);
console.log(typeof (isBool));

JSFIDDLE

【讨论】:

  • 是的,问题是我试图存储它的变量:) 请参阅下面的答案:) 感谢您的努力:)
【解决方案3】:

此链接上接受的答案讨论了布尔变量。也许那里的东西可能会有所帮助:Declaring a boolean in JavaScript using just var

要注意的部分是

var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool

您的值似乎是字符串,因为它们被设置为字符串。

【讨论】:

    【解决方案4】:

    你可以使用!!解析bool

    var bool = !!'true';
    

    【讨论】:

    • 那一定是!!'false'返回false
    • 问题是:它不是那样工作的。任何非空字符串都被视为true
    【解决方案5】:

    您可以使用以下方法解析布尔变量:

    1. var myVar = Boolean("false");
    2. var myVar = !!"false";

    请注意,任何不是空字符串或“false”的字符串都将评估为“true”。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2015-10-29
      • 2021-12-29
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多