我有一个开关^
let s = "aaa"
switch (true) {
case s.includes('a'):
url = 'https://a.com/wp-admin/post-new.php'
console.log(url)
break
case s.includes('b'):
url = 'https://b.com/wp-admin/post-new.php'
console.log(url)
break
default:
console.log('default')
break
}
我试图将其更改为文字对象,但我不知道如何正确指定s.includes条件作为对象键
const objLit = (s) => {
const cases = {
//s.includes('a'): 'https://a.com/wp-admin/post-new.php',
[`${s.includes('a')}`]: 'https://a.com/wp-admin/post-new.php',
//s.includes('b'): 'https://b.com/wp-admin/post-new.php',
[`${s.includes('b')}`]: 'https://b.com/wp-admin/post-new.php',
}
let url = cases[s]
return url
}
console.log(objLit(s))
虽然这不会抛出错误,但它不能工作。
你不能。属性名是字符串或符号。
当您使用[]
语法时,表达式在对象创建时求值。.
你不能分配在查找时求值的代码。这就是switch
和if
/else
的作用
在您的例子中,由于includes()
返回一个布尔值,您只是创建了一个具有属性名为"true"
和"false"
的对象。
你可以说let url = cases.true
,但这将是一个可怕的黑客。