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