将布尔值传递给 jQuery 插件的最万无一失的方法是什么?

What's the most foolproof way to pass a Boolean value to a jQuery plugin?

本文关键字:万无一失 是什么 方法 插件 值传 布尔 jQuery      更新时间:2023-09-26

当构建一个应该传递布尔值的jQuery插件时,以用户友好的方式将输入转换为布尔值的最万无一失的方法是什么?

更准确地说:我担心人们可能会传递一串'false'(而不是普通的false),因此!!optionBoolean(option)的简单转换将返回"错误"的值(!!'false' true)。

目前我正在像这样检查我的var option

if (typeof(option) != 'boolean'){
    if (option === 'false'){
        option = false; //fake false
    } else {
        option = !!option; //everything else is converted as truthy / falsy in a standard manner  
    }
}

但我想知道是否有一种更优雅和简洁的方式来做到这一点,或者这只是 JavaScript 处理这个问题的方式?

如果你害怕这样的输入,最万无一失的方法就是只做

if (typeof(option) != 'boolean')
    console.error('Function X expects a Boolean.');

看看你现在的解决方案,你没有考虑到01.或者noyes呢?

字符串和整数不能用作布尔值;因此,没有必要解析它们。


看看高质量/使用率的JS框架,他们不这样做。你为什么要这样做?

我会这样做。

var result = ( userInput === true );

此结果返回 true 的唯一方法是,如果类型为 if 布尔值且值为 true。否则,其他一切都是错误的。不要浪费时间试图纠正别人的错误。

但。。。。如果你手上有很多时间,那就试试这个。

var getBooleanValue = function( userInput ){
    if( !userInput ){
        return false;
    }
    var boolNames = {
        'true':1, 'yes':1,
        'false':0,'no':0,
        'yourMoM':1
    };
    return (userInput in boolNames && !!boolNames[ userInput ])|| ( userInput === true );
};
var tests = [
    [ true, true ],
    [ 'true', true ],
    [ 'yes', true ],
    [ false, false ],
    [ 'false', false ],
    [ 'no', false ]
];
var runTest = function( tests ){
    var i = tests.length;
    while( i-- ){
        if( getBooleanValue(tests[i][0]) !== tests[i][1] ){
            throw new Error( "Test error: getBooleanValues( " + tests[i][0] + ") should return " + tests[i][1] );
        }
    }
};
runTest( tests );

我会做这样的事情:

var falsey = ["0", "", "false", "null", "undefined", "NaN"];
var isFalse = false;
for(var i = 0, len = falsey.length; i < len; i++){
    if(options + "" == falsey[i]){
        isFalse = true;
        break;
    }
}

我所做的是将options和假值都串化0, "", false, null, undefined, NaN

无论它们是什么,这都会检测到它们(类似于搜索词和比较词的大写技术)

因为列表很短,你也可以用开关大小写来做,否则

如果