Javascript 这是jQuery模式浏览器安全吗;attr(';foo';)';默认值'&引用;?

Javascript 这是jQuery模式浏览器安全吗;attr(';foo';)';默认值'&引用;?,javascript,jquery,cross-browser,Javascript,Jquery,Cross Browser,这似乎是一种从数据属性读取值或在不存在默认值时使用默认值的简洁方法: var confirmMessage = resourceDiv.attr("data-confirm-delete-text") || "Delete this resource?"; 它依赖于undefined(如果属性不存在则返回)为false。这是浏览器安全的解决方案吗?如果没有,还有什么更好的方法呢?是的,它是浏览器安全的。只要小心在有效时错误的值上使用它,例如0,或false。还请注意,您会发现一些人不喜欢使用这

这似乎是一种从数据属性读取值或在不存在默认值时使用默认值的简洁方法:

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

它依赖于
undefined
(如果属性不存在则返回)为false。这是浏览器安全的解决方案吗?如果没有,还有什么更好的方法呢?

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

备选方案是
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?';

正如您所看到的,它们要详细得多,在三元结构的情况下,可能包含一些冗余。

谢谢Rory,太好了。在这种情况下,我不关心其他falsy值,因为它只用于接口消息(例如,在本例中的确认)。干杯,麦克斯