首先,x is a or b
不测试如果x
要么a
或b
;您正在寻找x is a or x is b
。这也可以写成x in [a, b]
无论如何编译为相同的东西。
其次后缀unless
有点不寻常。 (a) -> b unless c
编译成
function (a) {
if (!c) {
return b;
}
}
所以如果c
是真实的,该函数返回undefined
,这是falsey。所以这会起作用,但我会觉得这很混乱。其中的逻辑是真的:一个链接是外部的,只要链接目标不是非此即彼location.hostname
,“domain.com”或“sub.domain.com”,即
obj.hostname isnt location.hostname and obj.hostname isnt "domain.com" and obj.hostname isnt "sub.domain.com"
从而可以更简明地写为
obj.hostname not in [location.hostname, "domain.com", "sub.domain.com"]
注意,也将适用于伪类的东西在那里obj.hostname
为undefined
,因为undefined
肯定是不location.hostname
。这可能不是你想要的。您可以使用obj.hostname? and obj.hostname not in [...]
过滤出根本没有hostname
的元素。
还有一个问题需要跟进 - 我可以设置排除所有.domain.com子域的规则吗?例如* .domain.com - 没有全部指定它们? – strangerpixel 2014-09-22 11:25:58