Предполагая, что я заявляю
var ad = {};
Как я могу проверить, будет ли этот объект содержать какие-либо пользовательские свойства?
javascript
Рики
источник
источник
Object.keys
было бы проще всего:var a = [1,2,3];a.something=4;console.log(Object.keys(a))
поскольку это уже часть ECMA 5, вы можете смело использовать его: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Object.defineProperty(obj, 'foo', {enumerable:false, value:'foo'})
.Вы можете использовать встроенный
Object.keys
метод, чтобы получить список ключей объекта и проверить его длину.источник
var str = "MyString"; Object.keys(str);
, консоль выводит 8 клавиш от 0 до 7 для каждого символа. Или я до сих пор не понимаю ответ.Как насчет создания простой функции?
hasOwnProperty
Метод вызова непосредственно наObject.prototype
только добавить немного больше безопасности , представьте себе следующее , используя обычныйobj.hasOwnProperty(...)
вызов:Примечание: (на будущее) Приведенный выше метод опирается на
for...in
оператор, и этот оператор выполняет итерации только по перечисляемым свойствам. В наиболее широко применяемом на данный момент стандарте ECMAScript (3-е издание) у программиста нет никакого способа создания неперечислимых свойств. ,Однако теперь это изменилось в ECMAScript 5th Edition , и мы можем создавать не перечисляемые, не записываемые или не удаляемые свойства, поэтому приведенный выше метод может завершиться ошибкой , например:
ECMAScript 5 решение этой проблемы будет:
В
Object.getOwnPropertyNames
метод возвращаетArray
содержащий имена всех тех собственных свойств объекта, перечисляемого или нет , этот метод реализуется в настоящее время производителями браузеров, это уже на Chrome 5 Beta и последний WebKit ночные сборки.Object.defineProperty
также доступен в этих браузерах и последних версиях Firefox 3.7 Alpha.источник
hasOwnProperty
свойство, функция может потерпеть крах ... Я знаю, что я немного параноик ... но иногда вы не знаете, в какой среде будет использоваться ваш код, но Вы знаете, какой метод вы хотите использовать ...Object.prototype
, оно не будет перечисленоfor...in
. ТакisEmptyObject({toString:1})
что не получится. Это одна из печальных причин вы не можете вполне использоватьObject
как отображение общего назначения.С jQuery вы можете использовать:
Начиная с jQuery 1.4 этот метод проверяет как свойства самого объекта, так и свойства, унаследованные от прототипов (в том смысле, что он не использует hasOwnProperty).
С ECMAScript 5th Edition в современных браузерах (IE9 +, FF4 +, Chrome5 +, Opera12 +, Safari5 +) вы можете использовать встроенный метод Object.keys :
Или просто старый JavaScript:
источник
Самые последние браузеры (и node.js) поддерживают Object.keys (), который возвращает массив со всеми ключами в вашем литерале объекта, чтобы вы могли сделать следующее:
Поддержка браузеров: Firefox 4, Chrome 5, Internet Explorer 9, Opera 12, Safari 5
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
источник
Если вы используете underscore.js, вы можете использовать функцию _.isEmpty :
источник
_.isEmpty([]) // true
Обязательно проверьте сначала: stackoverflow.com/a/22482737/1922747Если вы хотите использовать lodash , вы можете использовать
some
метод.Посмотрите этот маленький пример jsbin
источник
_.some([1, 2]) // true
Обязательно проверьте сначала: stackoverflow.com/a/13356338/1922747Если вам нужно быть в безопасности и проверять прототипы объектов (они добавляются определенными библиотеками, а по умолчанию их нет):
источник
Член означает свойство члена, переменную члена, как вы хотите, чтобы она называлась> _>
Приведенный выше код вернет ВСЕ, включая toString ... Если вы только хотите увидеть, был ли расширен прототип объекта:
Примечание A: Мы проверяем, имеет ли член фиктивного объекта тот же тип, что и член нашего тестируемого объекта. Если это расширение, тип члена dummyobject должен быть "undefined"
источник
Простой, работает в любом браузере, и хотя технически это цикл для всех ключей объекта, он НЕ проходит через все их ... либо есть 0 и цикл не запускается, либо есть некоторые, и он прерывается после первого один (потому что все, что мы проверяем, если есть что-нибудь ... так зачем продолжать?)
источник
Ответ очень поздний, но это то, как вы можете справиться с прототипами.
источник
Когда вы уверены, что объект является пользовательским, самым простым способом определить, является ли UDO пустым, будет следующий код:
Хотя этот метод (по своей природе) дедуктивный, он самый быстрый и быстрый из возможных.
ps:! не используйте его на объектах, определенных браузером.
источник
Поздний ответ, но некоторые фреймворки обрабатывают объекты как перечислимые. Следовательно, bob.js может сделать это так:
источник
Вы можете использовать следующее:
Двойной взрыв! поиск недвижимости
hasOwnProperty Это то, что я использовал для:
Тем не менее, JavaScript решил не защищать имя метода, поэтому он может быть подделан.
опора в myObject
тип
Однако, это не проверяет на ноль.
Я думаю, что это лучший способ.
в операторе
результат:
Вот ссылка, которая более подробно описывает оператор in: Определение существования свойства объекта.
источник
Функция ES6
Примеры:
источник
Как насчет этого?
источник