Javascript 返回0或1的布尔值与其他函数冲突
我制作了一个通用函数Javascript 返回0或1的布尔值与其他函数冲突,javascript,function,parameters,boolean,Javascript,Function,Parameters,Boolean,我制作了一个通用函数filter(arr,func),它使用给定函数作为参数过滤数组。只有那些func(elem)返回true的元素才能组成新数组 问题在于,如果数组项小于10,low函数返回true,如果数组项为布尔值,bool函数返回true。由于booleans在javascript中返回1或0,这与我的low函数冲突 是他们阻止布尔值返回数字的方法吗?或者以某种方式将布尔结果排除在低函数之外 var array = [4, 8, 'bob', true, 'stink', 55, fal
filter(arr,func)
,它使用给定函数作为参数过滤数组。只有那些func(elem)
返回true的元素才能组成新数组
问题在于,如果数组项小于10,low函数
返回true,如果数组项为布尔值,bool函数
返回true。由于booleans在javascript中返回1或0,这与我的low函数
冲突
是他们阻止布尔值返回数字的方法吗?或者以某种方式将布尔结果排除在低函数之外
var array = [4, 8, 'bob', true, 'stink', 55, false, 'pepo', 11];
function low(val) {
return val < 10;
}
function word(str) {
if(typeof str == 'string')
return true;
}
function bool(b) {
if (typeof b == 'boolean')
return true;
}
function filter(arr, func) {
var newArr = [];
for(var i = arr.length; i >= 0; i--) {
var result = func(arr[i]);
if(result == true) {
newArr.push(arr[i]);
}
}
return newArr;
}
alert(filter(array, low));
var数组=[4,8,'bob',true,'stink',55,false,'pepo',11];
功能低(val){
返回值<10;
}
虚词{
if(typeof str=='string')
返回true;
}
函数布尔(b){
if(typeof b=='boolean')
返回true;
}
函数过滤器(arr、func){
var newArr=[];
对于(变量i=arr.length;i>=0;i--){
var结果=func(arr[i]);
如果(结果==真){
新推力(arr[i]);
}
}
返回newArr;
}
警报(过滤器(阵列,低位));
是他们阻止布尔值返回数字的方法吗?或者以某种方式将布尔结果排除在low
函数之外
在数值上下文中计算的布尔值(例如true<10
)被隐式强制为数字,其数值为:
Number(true) === 1
Number(false) === 0
因此true<10
的计算结果为1<10
,这是真的
在进行比较之前,可以检查传递的参数是否为数字:
function low(val) {
return typeof val == 'number' && val < 10;
}
这是一种方法:
var array = [4, 8, 'bob', true, 'stink', 55, false, 'pepo', 11];
function low(val) {
return bool(val) === false ? val < 10 : false;
}
function word(str) {
return typeof str === 'string' ? true : false;
}
function bool(b) {
return typeof b === 'boolean' ? true : false;
}
function filter(arr, func) {
var newArr = [];
for(var i = arr.length; i >= 0; i--) {
var result = func(arr[i]);
if(result === true) {
newArr.push(arr[i]);
}
}
return newArr;
}
alert(filter(array, low));
这就是我建议编写以下方法的原因:
function bool(b) {
if (typeof b === 'boolean')
return true;
return false; // important
}
或者,正如我喜欢用单线表示法制作的:
some condition ? true : false;
示例如下:
function bool(b) {
return typeof b === 'boolean' ? true : false;
}
或分配给变量:
var myVar = 1000 > 0 ? 1 : 0; // will result myVar to be 1;
当与typeof比较时,应该使用three==。。。i、 e.如果(typeof myVar==“undefined”){…}
val<10
将始终true
或false
,而不是1
或0
。
function bool(b) {
return typeof b === 'boolean' ? true : false;
}
var myVar = 1000 > 0 ? 1 : 0; // will result myVar to be 1;