JavaScript中括号内双值的逗号表达式有何用途?何时返回非空值?
关于
let n = (this.params.domain, []);代码的解析 这行代码用到了JavaScript的逗号运算符,这个运算符的规则很明确:从左到右依次执行逗号分隔的每一个表达式,最终返回最后一个表达式的计算结果。所以不管this.params.domain是什么值(哪怕是undefined、对象或者其他类型),这行代码都会把最后一个表达式[]赋值给变量n,这就是你测试时n始终是空数组的原因。
这种写法的可能用途
这种写法基本是无效或遗留的冗余代码:
- 大概率是代码迭代过程中留下的痕迹——比如原本这里有更复杂的逻辑(比如先执行
this.params.domain相关的操作,再返回某个数组),后来修改时删掉了中间逻辑,只留下了逗号和空数组; - 也有可能是开发者误用了逗号运算符,把原本想写的数组元素(比如
[this.params.domain])写错成了逗号表达式。
什么时候n的值不是[]?
只有修改最后一个表达式的内容,让它返回非空数组时,n才会不是空数组。比如:
- 把最后一个表达式改成具体的非空数组:
let n = (this.params.domain, [1, 2, 3]);,此时n的值是[1,2,3]; - 最后一个表达式是返回非空数组的函数调用:
let n = (this.params.domain, getNonEmptyArray());,只要getNonEmptyArray()返回非空数组,n就会是该数组; - 最后一个表达式是指向非空数组的变量:
const arr = [4,5]; let n = (this.params.domain, arr);,此时n的值是[4,5]。
但就你给出的原始代码而言,最后一个表达式是固定的空数组字面量[],所以n永远只会是空数组。
内容的提问来源于stack exchange,提问作者hamburger
相关产品推荐
相关产品推荐

