能否不赋值给变量直接引用JavaScript数组的length属性?
问题解答
不能直接用this.length,因为在你写的表达式里,this并不指向前面的数组字面量——数组字面量本身不会成为当前上下文的this,这里的this会取当前执行环境的全局对象(浏览器里是window)或者严格模式下的undefined,运行时要么得到错误的长度值,要么直接报错。
要实现一行代码随机取数组元素且不用额外变量,有两种简洁的写法:
- 推荐写法(无冗余,灵活):用立即执行函数包裹数组,避免重复书写:
((arr) => arr[Math.floor(Math.random() * arr.length)])(["GET", "POST", "PUT", "DELETE"])
- 极简写法(适合固定长度数组):直接写死数组长度(但数组元素变更时需要同步修改长度值,不够灵活):
["GET", "POST", "PUT", "DELETE"][Math.floor(Math.random() * 4)]
如果你的环境支持ES2022及以上,还可以用Math.random()结合at()方法简化索引计算(本质和第一种思路一致):
((arr) => arr.at(Math.floor(Math.random() * arr.length)))(["GET", "POST", "PUT", "DELETE"])
内容的提问来源于stack exchange,提问作者arsy
相关产品推荐
相关产品推荐

