JavaScript高级程序设计--笔记(1)
原始值和引用值:
- 原始值(primitive value) 存储在栈(stack)中,就是说它们的值直接存储在变量访问的位置。
- 引用值(reference value) 存储在堆(heap)中,就是说存储在变量处的值是一个指针(point),指向存储对象的内存处。
原始类型
ECMAScript有 5 种原始类型
Undefined
Null
Boolean
Number
String
提示:在许多语言中,字符串都被看做为引用类型,而非原始类型,因为字符串的长度是可变的的。在ECMAScript中不是这样。
Undefined类型
当声明的变量未初始化时,该变量的默认值为undefined。
var oTemp;
声明了变量oTemp,没有初始值,该变量将会被赋予值undefined。
var oTemp;
alert(oTemp == undefined);
还可以用typeof运算符
var oTemp;
alert(typeof oTemp);
显示为 undefined,但它不同于未定义的值,只不过typeof不加以区分。在上面的代码中如果加入
alert(typeof oTemp1);
也会显示为undefined,但是要是对oTemp1使用除typeof之外别的运算符的话,就会出错,因为其它变量只会应用于已声明的变量上。
当函数无明确返回值时,返回的也是值undefined
function testFunc() {
}
alert(testFunc() == undefined);
Null 类型
值undefined是从值null派生而来。因此ECMAScript把它们定义为相等。
alert(null == undefined);
undefined表示声明了变量但是未对其初始化,而null表示尚未存在的对象
var n = null;
alert(n);
Boolean类型
var bFound = true;
var bLost = false;
Number类型
NaN表示非数(Not a Number),一般发生在类型转换失败时。它与自身不相等。
isNaN("blue"); true
String类型
强制转换
var
var s1 = String(null)
var oNull = null;
var s2 = oNull.toString()
强制转换不会出错,而toString()对null 或 undefined会引发错误。
引用类型
Object类
与java中的 java.lang.object相似,ECMAScript中的所有类都由这个类继承,Object类中的所有属性和方法都会出现在其它类中。
属性:
Constructor------对创建对象的函数的引用(指针)
Prototype-------对该对象的对象原型的引用
方法
hasOwnProperty(property) 判断对象是否有某个特定的属性。必须用字符串来指定属性,如o.HasOwnProperty("name")
isPrototypeOf(object) 判断该对象是否是呆一个对象的原型。
propertyIsEnumerable(property)判断给定的属性是否可以用for...in语句进行枚举。
toString()
ValueOf() 返回最适合该对象的原始值。对许多类来说,该方法返回值与toString()相同。
Boolean类
Number类
Number类是Number原始类型的引用类型。
var oNumber = new Number(55);
var i = 156;
alert(i.toFixed(2));
var j = new Number(156);
alert(j.toFixed(2));
都返回156.00
String()类
var oString = new String("Hello, World");
instanceof运算符与typeof运算符类似,用于识别正在处理的对象的类型。与typeof方法不同的是,instanceof方法要求开发者明确的确认对象为某特定类型。
var oString = new String("Hello, World");
alert(oString instanceof String);