将布尔值传递给 jQuery 插件的最万无一失的方法是什么?
What's the most foolproof way to pass a Boolean value to a jQuery plugin?
当构建一个应该传递布尔值的jQuery插件时,以用户友好的方式将输入转换为布尔值的最万无一失的方法是什么?
更准确地说:我担心人们可能会传递一串'false'
(而不是普通的false
),因此!!option
或Boolean(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.');
看看你现在的解决方案,你没有考虑到0
或1
.或者no
或yes
呢?
字符串和整数不能用作布尔值;因此,没有必要解析它们。
看看高质量/使用率的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
无论它们是什么,这都会检测到它们(类似于搜索词和比较词的大写技术)
因为列表很短,你也可以用开关大小写来做,否则
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 我的客户端选项是什么
- 这是什么“;要求“;事情
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- @@(“at at”)在ES6 JavaScript中是什么意思
- knex:根据结果创建数组的合适方法是什么
- JSDoc:模块和名称空间之间的关系是什么
- 将布尔值传递给 jQuery 插件的最万无一失的方法是什么?