我们有这个Java脚本对象:

const recordCollection = {
  2468: {
    albumTitle: '1999',
    artist: 'Prince',
    tracks: ['1999', 'Little Red Corvette']
  },
  1245: {
    artist: 'Robert Palmer',
    tracks: []
  },
  5439: {
    albumTitle: 'ABBA Gold'
  }
};

为了能够更新对象的属性,可以使用以下两个函数之一:

unction updateRecords(records, id, prop, value) {
  if (value === "") {
    delete records[id][prop];
  } else if (prop !== "tracks" && value !== "") {
    records[id][prop] = value;
  } else if (prop === "tracks" && value !== "") {
    if (records[id].hasOwnProperty("tracks") === false) {
      records[id][prop] = [];
    }
    records[id][prop].push(value);
  }
  return records;
}

let result = updateRecords(recordCollection, 2468, "tracks", "");
console.log(result);

function updateRecords(records, id, prop, value) {
   if (value === ""){ 
       delete records[id][prop];
   } else if(prop === "tracks" && value !== ""){
   records[id][prop] = records[id][prop] || [];
    records[id][prop].push(value);
  } else if(prop !== "tracks" && value !== "") {
    records[id][prop] = value;
  }
  return records;
}

let result = updateRecords(recordCollection, 2468, "tracks", "lala");
console.log(result);

在该函数中,使用‘if(Value="")’进行初始判断,以确定值是否为空字符串.在此之后,判断另外两个条件,并使用‘&&’运算符一致地验证空字符串条件.

是否有必要重复判断空字符串?是否可以安全地删除‘&&Value!==""部分,而不引入错误或更改代码的预期功能?

如果使用和不使用相同,哪种代码会更好?为什么?

请为您的回答(为什么和如何..)提供解释.非常感谢!

我已经try 了两个版本,有双重判断和没有双重判断,但看不出有什么不同.这段代码是来自freecodecamp的一个Java脚本练习的解决方案.我有我已经提到的具体问题,但也欢迎任何其他信息!谢谢!

推荐答案

假设第一个if (value === "")的计算结果为false,则后面的else if不需要测试IF value !== "",因为根据定义,您可以假定情况就是这样.因此,您的第一个函数可以简化为:

function updateRecords(records, id, prop, value) {
  if (value === "") {
    delete records[id][prop];
  } else if (prop !== "tracks") {
    records[id][prop] = value;
  } else if (prop === "tracks") {
    if (records[id].hasOwnProperty("tracks") === false) {
      records[id][prop] = [];
    }
    records[id][prop].push(value);
  }
  return records;
}

我会争辩说,这个版本的代码更好,因为它更短,冗余更少.

Javascript相关问答推荐

主要内部的ExtJS多个子应用程序

具有相同参数的JS类

Vega中的模运算符

如何最好地从TypScript中的enum获取值

IMDB使用 puppeteer 加载更多按钮(nodejs)

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

如何在模块层面提供服务?

如何根据当前打开的BottomTab Screeb动态加载React组件?

Web Crypto API解密失败,RSA-OAEP

如何将未排序的元素追加到数组的末尾?

为什么我的自定义元素没有被垃圾回收?

如何使用JS创建一个明暗功能按钮?

在VS代码上一次设置多个变量格式

判断函数参数的类型

为什么NULL不能在构造函数的.Prototype中工作

react 路由DOM有条件地呈现元素

用Reaction-RT-Chart创建实时条形图

AstroJS混合模式服务器终结点返回404

KeyboardEvent:检测到键具有打印的表示形式

验证Java脚本函数中的两个变量