1、一个适用于尚未初始化的无类型变量或未初始化的动态对象属性的特殊值。在 ActionScript 3.0 中,只有无类型变量才能采用值 undefined
,这在 ActionScript 1.0 和 ActionScript 2.0 中并非如此。例如,以下两个变量都是undefined
,因为它们都未类型化或初始化:
- var foo;
- var bar:*;
undefined
值还适用于动态对象的未初始化或未定义的属性。例如,如果某对象是 Object 类的一个实例,则除非向该属性赋予值,否则动态添加的任何属性的值将为 undefined
。
将 undefined
用于不同的函数时,结果也不相同:
-
由
String(undefined)
返回的值为"undefined"
(undefined
转换为字符串)。 -
由
Number(undefined)
返回的值为NaN
。 -
由
int(undefined)
和uint(undefined)
返回的值为 0。 -
由
Object(undefined)
返回的值为新的 Object 实例。 -
向类型变量赋予值
undefined
时,该值将转换为该数据类型的默认值。
不要混淆 undefined
和 null
。使用等于运算符 (==
)
对 null
和 undefined
进行比较时,它们的比较结果为相等。但是,使用全等运算符
(===
) 对 null
和 undefined
进行比较时,它们的比较结果为不相等。
在以下示例中,将声明(但不初始化)一个无类型变量 myVar
。myVar
的值为 undefined
,因为该变量是一个无类型变量。无论变量是没有类型注释,还是使用特殊的
(*) 无类型注释 (var myVar:*;
),都是如此。
- // trace value of untyped and uninitialized variable
- var myVar;
- trace(myVar); // undefined
该规则同样适用于动态对象的未初始化属性。例如,给定实例 obj
(属于动态类 A
),obj.propName
(obj
实例的未初始化属性)的值为 undefined
。
- dynamic class A {}
- var obj:A = new A()
- // trace undefined property of obj
- trace(obj.propName); // undefined
2、判断undefined的问题
上面的介绍中已经介绍了几种,即通过类型转换再进行判断,还有一种方法: