Это, вероятно, единственная явная форма определения, имеет ли существующее имя-свойства явное и предполагаемое значение undefined
; который, тем не менее, является типом JS.
"propertyName" in containerObject && ""+containerObject["propertyName"] == "undefined";
>> true \ false
Это выражение будет возвращать true
только в том случае, если имя свойства данного контекста существует (верно) и только если его предполагаемое значение явно undefined
.
Не будет ложных срабатываний, как с пустыми или пустыми строками, нулями, нулями, так и с пустыми массивами и т. П. Это делает именно это. Проверяет, т.е. проверяет, существует ли имя свойства (в противном случае это будет ложный положительный результат), а затем явно проверяет, является ли его значение undefined
, например. неопределенного типа JS В строковой форме представления (буквально «undefined») поэтому ==
вместо ===
, потому что дальнейшее преобразование невозможно. И это выражение вернет true, только если оба, то есть все условия выполнены. например если имя свойства не существует, - оно вернет false. Который является единственным правильным возвращением, так как несуществующие свойства не могут иметь значений, даже не определенных.
Пример:
containerObject = { propertyName: void "anything" }
>> Object { propertyName: undefined }
// now the testing
"propertyName" in containerObject && ""+containerObject["propertyName"] == "undefined";
>> true
/* which makes sure that nonexistent property will not return a false positive
* unless it is previously defined */
"foo" in containerObject && ""+containerObject["foo"] == "undefined";
>> false