看你的 obj 里没有 isd 属性,所以三元运算符的第一个表达式恒为 false,冒号前面的表达式,也就是空字符串 ''不会被执行。(有isd属性的情况应该不难推测)。 由于 && 运算符的优先级高于 =,所以冒号后面的内容相当于: obj[next.id] = true && cur.push(next); 另外,鉴于 true && exp 恒等于后面的表达式 exp,冒号后面的内容可以进一步简化为: obj[next.id] = cur.push(next); 而 push函数会返回数组长度,第一次 push 之后这个长度为1,那么 obj[next.id] 的值就是 1 了。
看你的
obj
里没有isd
属性,所以三元运算符的第一个表达式恒为false
,冒号前面的表达式,也就是空字符串''
不会被执行。(有isd
属性的情况应该不难推测)。由于
&&
运算符的优先级高于=
,所以冒号后面的内容相当于:另外,鉴于
true && exp
恒等于后面的表达式exp
,冒号后面的内容可以进一步简化为:而
push
函数会返回数组长度,第一次push
之后这个长度为1,那么obj[next.id]
的值就是1
了。