Простейшим прочь, чтобы использовать обычный &&
:
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. –