还在使用if/switch条件判断?试试对象字面量(Object literals)

318 阅读1分钟

一、什么是对象字面量

对象字面值是封闭在花括号对{}中的,包含零个或多个"键-值"对的(元素)列表。但是{}不能出现在一条语句的开头,否则{}内会被认为是一个语句块。

以下对象car就是对象字面量的例子:


function CarTypes(name) {
  return (name === "WuLing") ?
    name :
    "抱歉我们没有卖" + name + "." ;
}
let remainsCount = 10

let car = {
    myCar: "小Mini",
    getCar: CarType("WuLing"),
    num: remainsCount
}
console.log(car.MyCar)  // 小Mini
console.log(car.getCar) // WuLing
console.log(car.num)    // 10

二、如何用对象字面量替换条件判断

常用的条件判断写法 —— if/else

if(YouWant.toLowerCase() === 'fruit') {
    return '大西瓜'
} else if (YoutWant.toLowerCase() === 'animal') {
    return '小红兔'
} else if (YouWant.toLowerCase() === 'cartoon') {
    return '《那年那兔》'
} else {
    return '别要了,没了!'
}

常用的条件判断写法 —— switch

switch(YouWant.toLowerCase()) {
    case 'fruit': return '大西瓜';
    case 'animal': return '小红兔';
    case 'cartoon': return '《那年那兔》';
    default: return '别要了,没了!'
    
}

Object 替换方案

const ObjectChoice = {
    fruit: '大西瓜',
    animal: '小红兔',
    cartoon: '《那年那兔》',
}

return ObjectChoice[YouWant.toLowerCase()] ?? '别要了,没了!'

可以看到Object的方案结果与上面两个一致。

三、Object 方案的优缺点

  1. 优点:
  • Object看起来相对整洁;
  • 检查条件更少。
  1. 缺点:
  • 只能针对字面量的返回,对于复杂逻辑无法处理;
  • 对象键的值太多的情况下会不注意出现重复,可以用 Map 进行替代优化。

四、参考

  1. 对象字面量(Object literals)