В чем преимущество нетипизированной переменной над объектом? В чем разница между null и undefined?
согласно этому : http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9f.html цитата:
нетипизированная переменная не совпадает с переменной типа Object. Ключевое отличие состоит в том , что нетипизированные переменные могут содержать специальное значение undefined, а переменная типа Object не может содержать это значение.
однако, когда я проверить его как :
var objTest:Object = 123;
var untypedTest:* = 123;
objTest = undefined;
untypedTest = undefined;
//This is understandable but why was the assignment even allowed?
trace(objTest); // prints null
trace(untypedTest); // prints undefined
objTest=null;
untypedTest = null;
//This is also understandable ... both can store null
trace(objTest); // prints null
trace(untypedTest); // prints null
//If they are null whey are they being equal to undefined?
if(objTest==undefined)
trace("obj is undefined");
if(untypedTest==undefined)
trace("untyped is undefined");
//Because null is same as undefined!
if(null==undefined)
trace("null is same as undefined?");
два вопросы:
- почему назначение undefined разрешено для obj? (не большая проблема, так как он по-прежнему печатает как null)
- если мы сравниваем null с undefined результат true (даже если null хранится в объекте). Какой смысл делать различие между null и undefined, если они равны?
2 ответов
- Flash имеет преобразование типов для преобразования некоторых типов.
некоторые примеры этого:
var i:int = NaN;
trace (i); // 0
или:
var b:Boolean = null;
trace(b); // false
поэтому, когда вы присваиваете undefined
to Object
экземпляр Flash преобразует его в null
таким же образом.
- ваше сравнение применяется преобразование типов на несовместимых типах перед оценкой
Boolean
.
вы можете использовать строгое сравнение, чтобы иметь false
:
if(null === undefined)
trace("Never traced: null is not the same as undefined!");
некоторые значения тихо преобразуются для сравнения или назначения.
одним из таких преобразований является преобразование undefined
перейти к null
при повышении до Object
. Отсюда null == undefined
потому что в основном было сделано на самом деле Object(null) == Object(undefined)
и это null == null
.
однако, если вы делаете строгое сравнение, они не преобразуются и, следовательно, не равны, т. е. null === undefined
даст false.