如何使用JavaScript区分布尔值和字符串返回值?

时间:2012-06-20 22:02:56

标签: javascript boolean

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

我需要在正常条件下区分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()

...但我还没弄明白如何创建一个行为方式的{{1}}函数。有任何想法吗?

3 个答案:

答案 0 :(得分:6)

根据这个:

  

@Esailija为什么没有意义?如果是真,则返回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('');
}

答案 1 :(得分:2)

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

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

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

http://jsfiddle.net/n8dEF/

另一种方法是使用RegEx:

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

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

答案 2 :(得分: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