проблема в том, что нет «стандартной функции», которую вы могли бы написать, чтобы определить, «установлено ли что-то». например, если это действительно нулевой объект, вы не хотите с ним работать; но если у него есть ключи, то вы ДЕЙСТВИТЕЛЬНО хотите с ним работать - однако, если вы попытаетесь увидеть, есть ли у него ключи, когда их нет, даже если "typeof" возвращает "object", используя "Object.keys()" выдает ошибку, говоря, что это не объект. Итак, у нас, похоже, есть ловушка 22 (o_O) ... есть ли лучший способ увидеть, действительно ли объект является нулевым или у него есть ключи, не выдавая ошибку?
я использовал базовую функцию, чтобы увидеть, установлен ли объект даже до того, как посмотреть, имеет ли он действительное ЗНАЧЕНИЕ, но я сталкиваюсь со сценариями, в которых это не удается. в сценарии indexeddb и сценарии «this.items» оба оцениваются как «null», даже если их «тип» является «объектом», а их «объекты» ИМЕЮТ ключи; но если я оценю ключи, когда их нет, это вызовет еще одну ошибку, потому что объект ДЕЙСТВИТЕЛЬНО является нулевым в этот момент (без ключей/свойств). использование «объектных» функций, таких как «Object.keys» или «hasOwnProperty» и т. д., вызывает ошибку «это не объект».
по сути, то, что мне НУЖНО сделать, - это иметь возможность правильно определить: «БЫЛ ли этот объект установлен на ЛЮБУЮ ВЕЩЬ ВООБЩЕ, или это действительно ПУСТОЙ объект?». в данном случае это означает, что «есть ли у него КАКИЕ-ЛИБО свойства, даже если их соответствующие значения равны нулю???» - мне просто нужно знать, что у них ДЕЙСТВИТЕЛЬНО есть свойства, без использования блока «try catch» и без использования объектных функций (потому что они терпят неудачу, если объект действительно равен нулю).
typeof(null) === 'object'
, но неверно, что[] === null
. Можете ли вы объяснить, почему вы думаете иначе? - person ruakh   schedule 28.01.2013obj === null
недостаточно? - person apsillers   schedule 28.01.2013add
? Еслиthis.item === null
, то у вас может быть другое значение дляthis
, чем вы ожидаете, что возможно.this
устанавливается при вызове функции; не тогда, когда это определено. - person Jonathan Lonowski   schedule 28.01.2013obj === null && Object.keys(obj).length > 0
всегда может быть правдой? Вы сделали опечатку? Должен ли быть!==
вместо этого? #2) При каких обстоятельствахObject.keys(obj)
возвращаетundefined
? Вы имеете в виду, еслиObject.keys(obj).length < 0
? - person apsillers   schedule 29.01.2013