这个jQuery模式是浏览器安全的:“attr('foo')||'default'”?

时间:2017-02-27 13:53:53

标签: javascript jquery cross-browser

这似乎是一种从数据属性中读取值的简洁方法,或者如果它不存在则使用默认值:

var confirmMessage = resourceDiv.attr("data-confirm-delete-text") || "Delete this resource?";

它依赖于undefined(如果该属性不存在则返回)是假的。这是一个浏览器安全的解决方案吗?如果没有,有什么更好的方式?

1 个答案:

答案 0 :(得分:2)

是的,浏览器安全。只要警惕在有效的值上使用它,例如0false。另请注意,您会发现一些不喜欢使用该结构的人,但主要是因为代码可读性问题,而不是浏览器支持。

备选方案是if声明:

var confirmMessage = resourceDiv.attr("data-confirm-delete-text");
if (!confirmMessage)
  confirmMessage = "Delete this resource?";

或三元:

var confirmMessage = resourceDiv.attr("data-confirm-delete-text") ? resourceDiv.attr("data-confirm-delete-text") : 'Delete this resource?';

正如您所看到的,它们更加冗长,就三元而言,可能包含一些冗余。