最簡單的客場是使用傳統的&&
:
if ("prop1" in a && "prop2" in a && "prop3" in a)
console.log("a has these properties:'prop1, prop2 and prop3'");
這不是一個'速記',但它並不比你提出的要長。
你也可以把你想要在一個陣列測試屬性名稱和使用every
方法:但是
var propertiesToTest = ["prop1", "prop2", "prop3"];
if (propertiesToTest.every(function(x) { return x in a; }))
console.log("a has these properties:'prop1, prop2 and prop3'");
請注意,這是在ECMAScript中5推出,因此它不提供一些較舊的瀏覽器。如果這是一個問題,你可以提供你自己的版本。下面是從MDN實現:
if (!Array.prototype.every) {
Array.prototype.every = function(fun /*, thisp */) {
'use strict';
var t, len, i, thisp;
if (this == null) {
throw new TypeError();
}
t = Object(this);
len = t.length >>> 0;
if (typeof fun !== 'function') {
throw new TypeError();
}
thisp = arguments[1];
for (i = 0; i < len; i++) {
if (i in t && !fun.call(thisp, t[i], i, t)) {
return false;
}
}
return true;
};
}
,我相信它的工作原理,現在,有沒有更好的解決方案? :)如果我們的屬性列表很長,第二個解決方案看起來像一個好鏡頭,讓我們看看 – Benedictus
Ow,那麼傳統方式會太長了,而且每個方法都需要jQuery嗎? – Benedictus
@Benedictus不,這是香草JS。 –