Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回0或1的布尔值与其他函数冲突_Javascript_Function_Parameters_Boolean - Fatal编程技术网

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;