jQuery .append 与三元 `:?` 运算符的错误?

jQuery bug in .append with ternary `:?` operators?

使用

var states = {
    Abbreviation: "AR",
    Name: "Arkansas"
}

为什么会这样。

$.each(states, function () { 
               var o = {
                    value: this.Abbreviation,
                    text: this.Name
                }

                if (this.Abbreviation === "AR") { //hardcoded for you pleasure
                    o.selected = 'selected';
                }

                e.append(
                    $('<option/>', o)
                );    
            });

但不是这个:

$.each(states, function () { 
                e.append(                        
                    $('<option/>', {
                        value: this.Abbreviation,
                        text: this.Name,
                        selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : '')
                    })
                );    
            });

对于三元 :? 运算符,jquery 中的 .append 是否有限制?

注意:我记录了 if 语句的输出,当 运行 注释掉的代码显示所有选项都被选中时,日志输出只有 1 个选项 = true。未提交的输出代码,按预期运行。

我猜它没有评估它

((this.Abbreviation === csc.statesDDL.txt().val()) ? 'selected' : '')

但评估为

(this.Abbreviation === (csc.statesDDL.txt().val() ? 'selected' : ''))

问题不在于三元,似乎是 jQuery/HTML 处理空字符串的方式。 jQuery 很可能不会将 属性 解析为明确的 false,从而创建一个带有 "selected=''" 的元素,浏览器可能只是将其解释为 "selected" 我认为来自一个旧的 HTML 标准,承认它被选中。如果你将 false 明确化,它将起作用:

selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : false)