Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 原始实现如何处理未定义和空元素,为什么会出现问题?你的代码如何解决这个问题?_Javascript - Fatal编程技术网

Javascript 原始实现如何处理未定义和空元素,为什么会出现问题?你的代码如何解决这个问题?

Javascript 原始实现如何处理未定义和空元素,为什么会出现问题?你的代码如何解决这个问题?,javascript,Javascript,以下函数用于应用程序中,以确定各种值是否被视为“空”。当前实现仅处理字符串和对象 我们现在需要修改它,以便更好地处理数组。因为数组也是对象,所以这段代码似乎可以很好地处理数组。事实上,它适用于大多数阵列,但这几乎是偶然的。您可能会遇到一些微妙的问题,其中对于没有元素的数组,函数返回false 有了这些信息,为什么该函数在大多数情况下都能工作?描述一种情况,当您期望它返回true时,它可能返回false。修改isEmpty,以便根据您的期望显式检查数组是否为空。修改后的代码应该清楚地区分数组和其他

以下函数用于应用程序中,以确定各种值是否被视为“空”。当前实现仅处理字符串和对象

我们现在需要修改它,以便更好地处理数组。因为数组也是对象,所以这段代码似乎可以很好地处理数组。事实上,它适用于大多数阵列,但这几乎是偶然的。您可能会遇到一些微妙的问题,其中对于没有元素的数组,函数返回false

有了这些信息,为什么该函数在大多数情况下都能工作?描述一种情况,当您期望它返回true时,它可能返回false。修改isEmpty,以便根据您的期望显式检查数组是否为空。修改后的代码应该清楚地区分数组和其他对象。请务必测试您的代码,以证明它按预期工作。在答案中包含您的测试用例

我迄今为止的执行情况:

函数为空(值){
let type=值的类型;
如果(值===null | |未定义){
返回值.length==0;
}
if(数组.isArray(值)){
返回值.length==0;
}
如果(类型==‘对象’){
返回Object.keys(value).length==0;
}else if(type==='string'){
返回值.length==0;
}
}
//当前测试用例
console.log('{}',isEmpty({}));//真的
log(“{name:'Janice'}”,isEmpty({name:'Janice'}));//假的
console.log(“”),isEmpty(“”));//真的
console.log('Janice',isEmpty('Janice');//假的
console.log(“[]”,isEmpty([]);//真的
console.log(“['Janice']”,isEmpty(['Janice']);//假的
console.log('[null]',isEmpty([null]);//假的
console.log(“[undefined]”,isEmpty([undefined]);//假的
console.log({undefined}',isEmpty({undefined}));//假的
log(“{null:'true'}”,isEmpty({null:'true'}));//假的
log('null',isEmpty('null');

log('undefined',isEmpty('undefined')您可以将属性附加到数组,因为它也是一个对象。在这种情况下,您的代码将失败:

function isEmpty(value) {
  let type = typeof value;
  if (type === 'object') {
    return Object.keys(value).length === 0;
  } else if (type === 'string') {
    return value.length === 0;
  }
}
// current test cases
isEmpty({});                  // true
isEmpty({ name: 'Janice' });  // false

isEmpty('');                  // true
isEmpty('Janice');            // false

isEmpty([]);                  // true
isEmpty(['Janice']);          // false
您应该改为使用
Array.isArray
检查对象是否为数组,以及长度是否为0

const arr = [];
arr.prop = 1;
isEmpty(arr);//false

你为什么在我的回答之后编辑这个问题?不要在一个问题中问多个问题。对不起,我本想把这个问题作为主要问题来问的
function isEmpty(value) {
  let type = typeof value;
   if(Array.isArray(value)){
       return value.length === 0;
   } else  if (type === 'object') {
    return Object.keys(value).length === 0;
  } else if (type === 'string') {
    return value.length === 0;
  }
}