-6

我有一个函数,它返回一个值,如果满足条件,则返回 true,否则返回 false,但如果出现错误,该函数也可以返回字符串消息。

我需要区分正常条件下的真/假布尔值,而不会将字符串值误认为任何一个。我的策略是使用一个函数,该函数在传递布尔输入时将返回一个真正的布尔类型的真/假值,但在传递一个字符串时parseBoolean()返回一个不是布尔类型的“假”值。false

例子

function validate(kkk)
{
  //... some check that validates 
  return true;
  //... some check that doesn't validate
  return false;
  //... failure - return explanation
  return 'Error Message jjjjjjjj';
}

function usingit(data)
{
  if(parseBoolean(validate(data)) != false)
  {
    /// the value is Boolean true
  }
  else
  {
    if(parseBoolean(validate(data)) === false)
    {
      /// the value is Boolean false
    }
    else
    {
      /// the value is false but not of a Boolean type 
      /// so we will display it as the error message text.
    }
  }
}

...但我还没有弄清楚如何创建一个parseBoolean()以这种方式运行的函数。有任何想法吗?

4

3 回答 3

6

根据这个:

@Esailija 为什么没有意义?如果是 true 返回 true,如果是 false 返回 false,如果是 'somestring' 也返回 false。得到它?– 注册用户 31 秒前

你要

function parseBoolean(value) {
    return typeof value == "boolean" ? value : false;
}

但这显然无法通过厄运的考验。


此代码通过了您的所有测试:

function parseBoolean(bool) {
    return typeof bool == "boolean" ? bool : 0;
}

if( parseBoolean('anystring') == false ) {
    alert("");
}

if( parseBoolean('anystring') !== false ) {
    alert("");
}

if( parseBoolean(true) ) {
    alert('');
}

if( !parseBoolean(false) ) {
    alert('');
}
于 2012-06-20T22:26:51.480 回答
2

什么构成虚假?如果我必须将字符串转换为布尔值,我会引用一个应该转换为 false 的字符串表。

var falsableStrings = {
    "fff": true,
    "false": true
}

function isFalseString(str) {
    return ! falsableStrings[str.toLowerCase()]
}

http://jsfiddle.net/n8dEF/

另一种方法是使用正则表达式:

function isFalseString(str) {
    return ! (str == "" || str.match("(fff|false)"))
}

http://jsfiddle.net/n8dEF/2/

于 2012-06-20T22:12:51.240 回答
0

是你要找的吗?

var parseBooleanGenerator = function(aPerfectString) {
  return function(someStringFromWild) { 
    return aPerfectString === someStringFromWild 
  };
};

var goodString = 'FFF';
var badString = 'FfF';

console.log(parseBooleanGenerator('FFF')(goodString)); // true
console.log(parseBooleanGenerator('FFF')(badString)); // false

... 或者 ...

var checkForFFF = parseBooleanGenerator('FFF');
console.log(checkForFFF(goodString)); // true
console.log(checkForFFF(badString)); // false
于 2012-06-20T22:08:34.843 回答