Сначала легче объяснить с помощью String
.
Допустим, мы делаем это:
var v:* = null;
var s:String = v;
Что происходит?s
становится null
.null
является допустимым значением для ссылок типа String
.
Теперь вместо этого:
var v:* = null;
var s:String = String(v);
Что происходит сейчас?s
становится "null"
.Мы явно просим объект типа String
здесь, но null
имеет тип Null
, поэтому он должен быть преобразован.null
конвертируется в String
- это "null"
.
Если бы вы конвертировали 123.45
в String
, вы получите "123.45"
.Достаточно справедливо.
Теперь давайте попробуем с Object
.
var v:* = null;
var obj:Object = v;
obj
становится null
.
Сейчас:
var v:* = null;
var obj:Object = Object(v);
Здесь снова мы явно просим obj
указать на значение типа Object
, которое null
не является.null
, преобразованный в Object
, является пустым объектом.
Давайте еще раз посмотрим:
var s:String = null;
Здесь ссылка s
типа String
указывает на значение null
типа Null
.
Ссылка String
, значение Null
.
A String
ссылка может принимать значение Null
, но ссылка Number
не может приниматьзначение Null
, поэтому при присвоении null
Number
его необходимо преобразовать (т. е. 0
).
var n:Number = Number(null); // 0
Мышление в терминах ссылок и значений действительно помогает.
Также полезно помнить, что приведено для ссылок, преобразование для значений .Object(value)
- это конверсия.(value as Object)
является приведением.
Наконец, давайте попробуем с пользовательским типом.
class Person {}
Тогда:
var person:Person = null;
Здесь person
становится null
, как и следовало ожидать.
Но:
var person:Person = Person(null);
person
снова становится null
!Мы попросили Person
, но мы получили Null
.Почему?
Значение null
нельзя преобразовать в тип Person
.В таком случае результатом является значение по умолчанию для желаемого типа.Значение по умолчанию для Person
равно null
.
Вы также можете увидеть, как это преобразовывается в Number
.
var n:Number = Number("123.45");
n
становится 123.45
.
var n:Number = Number("The quick brown fox, period.");
n
становится NaN
.
Поскольку строку "The quick brown fox, period."
нельзя преобразовать в тип Number
, результатом является значение по умолчанию для Number
, равное NaN
.Это в отличие от предыдущего примера, где мы успешно преобразовали null
в Number
, получив 0
.
Я мог бы продолжить.
Если сомневаетесь, используйте as
оператор.value as Type
в основном составляет value is Type ? value : null
.Нет сложных правил для запоминания.Используйте Type(value)
только тогда, когда вы хотите преобразовать значение одного типа в значение другого типа.