4、引用类型(本地对象)
创建对象
象是由 new 运算符加上要实例化的对象的名字创建的:
var o = new Object();
?
如果没有参数,括号可以省略:
var o = new Object;
?
也可用下面方式创建一个对象 :
var o = {};
?
由下面代码可知,上述创建出的都是objet对象:
var o1 = {}; var o2 = new Object(); alert (o.construct == o1.construct)//true
?
Object 对象ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中 。 Object 对象具有下列属性:
constructor? 对创建对象的函数的引用(方法指针) 。对于 Object 对象,该指针指向原始的 Object() 函数。
Prototype? ? 对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例 。
Object 对象还具有几个方法:
hasOwnProperty(property) 判断某对象是否有某个特定的属性。必须用字符串指定该属性。例如,o.hasOwnProperty("name")
isPrototypeOf(object) 判断该对象是否为另一个对象的原型。
propertyIsEnumerable 判断给定的属性是否可以用 for...in 语句进行枚举。
toString() 返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的 值。
valueOf() ?返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 toString() 的返回值相同。
注释:上面列出的每种属性和方法都可以被其他对象覆盖。
Boolean 对象是 Boolean 原始类型的引用类型。 要创建 Boolean 对象,只需要传递 Boolean 值作为参数:
var oBooleanObject = new Boolean(true);
?
Boolean 对象将覆盖 Object 对象的 valueOf() 方法,返回原始值,即 true 和 false。toString() 方法也会被覆
盖,返回字符串 "true" 或 "false"。
Number 对象是 Number 原始类型的引用类型。要创建 Number 对象,采用下列代码:
var oNumberObject = new Number(68);
?
所有特殊值都是 Number 对象的静态属性,包括以下五个静态属性:
MAX_VALUE????????????? 可表示的最大的数。
MIN_VALUE?????????????? 可表示的最小的数。
NaN????????????????????????? 非数字值。
NEGATIVE_INFINITY? 负无穷大,溢出时返回该值。
POSITIVE_INFINITY?? 正无穷大,溢出时返回该值。
要得到数字对象的 Number 原始值,只需要使用 valueOf() 方法:
var iNumber = oNumberObject.valueOf();
?
当然,Number 类也有 toString() 方法,在《JavaScript学习笔记(三) —— 类型转换 》小节中已经详细讨论过该方法。
除了从 Object 对象继承的标准方法外,Number 对象还有几个处理数值的专用方法。
toFixed() 方法返回的是具有指定位数小数的数字的字符串表示 。例如:
var oNumberObject = new Number(68); alert(oNumberObject.toFixed(2)); //输出 "68.00" oNumberObject = new Number(68.123); alert(oNumberObject.toFixed(2)); //输出 "68.12" oNumberObject = new Number(68.523); alert(oNumberObject.toFixed(0)); //输出 "69",截断是四舍五入
?
注:toFixed() 方法能表示具有 0 到 20 位小数的数字 ,超过这个范围的值会引发错误:
alert(oNumberObject.toFixed(21)); //运行出错
?
toExponential()返回的是用科学计数法表示的数字的字符串形式 。toExponential() 方法也有一个参数,指定要输出的小数的位数。
例如:
var oNumberObject = new Number(68); alert(oNumberObject.toExponential(1)); //输出 "6.8e+1"
?
toPrecision()toPrecision() 方法根据最有意义的形式来返回数字的预定形式或指数形式 。它有一个参数,即用于表示数的数字总
数(不包括指数) 。例如:
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(1)); //输出 "7e+1"=70
?toPrecision() 方法会对数进行舍入 。不过,如果用 2 位数字表示 68:
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(2)); //输出 "68"
?如果指定的位数多于需要的位数:
var oNumberObject = new Number(68); alert(oNumberObject.toPrecision(3)); //输出 "68.0",补零
?toFixed()、toExponential() 和 toPrecision() 方法都会进行舍入操作 ,以便用正确的小数位数正确地表示一个数。
提示: 应该少用Boolean 、Number 对象,以避免潜在的问题。只要可能,都使用数字的原始表示法 。
String 对象是 String 原始类型的对象表示法。除了constructor、prototype属性外,还有一个length属性,这
这主不多介绍了,下面主要介绍一下它的相关方法。
方法都会返回 String 类型的原始值 :
var oStringObject = new String("hello world"); alert(oStringObject.valueOf() == oStringObject.toString()); //输出 "true"
?
charAt() 、charCodeAt()
charAt() 方法返回的是包含指定位置处的字符的字符串:
var oStringObject = new String("hello world"); alert(oStringObject.charAt(1)); //输出 "e"
?charCodeAt() 返回字符的unicode码:
oStringObject = new String("江"); alert(oStringObject.charCodeAt(0)); //输出 "27743"
?
concat()把一个或多个字符串连接到 String 对象的原始值上。该方法返回的是 String 原始值,保持原始的 String 对象不变
与用加号(+)连接字符串是一样的:
var oStringObject = new String("hello "); var sResult = oStringObject.concat("world"); alert(sResult); //输出 "hello world" alert(oStringObject); //输出 "hello "
?
indexOf() 、lastIndexOf()返回的都是指定的子串在另一个字符串中的位置,如果没有找不到子串,则返回 -1。
indexOf() 方法是从字符串的开头(位置 0)开始检索字符串,而 lastIndexOf() 方法则是从字符串的结尾开始检索子串。例如:
var oStringObject = new String("hello world!"); alert(oStringObject.indexOf("o")); //输出 "4" alert(oStringObject.lastIndexOf("o")); //输出 "7"
?
localeCompare()? 该方法有一个参数 - 要进行比较的字符串,返回的是下列三个值之一:
? 如果 String 对象按照字母顺序排在参数中的字符串之前,返回负数。
? 如果 String 对象等于参数中的字符串,返回 0
? 如果 String 对象按照字母顺序排在参数中的字符串之后,返回正数。
var oStringObject = new String("yellow"); alert(oStringObject.localeCompare("brick")); //输出 "1" alert(oStringObject.localeCompare("yellow")); //输出 "0" alert(oStringObject.localeCompare("zoo")); //输出 "-1" alert(oStringObject.localeCompare("yello")); //输出 "1"
?注:localeCompare() 是区分大小写的,大写字母在字母顺序上排在小写字母之后
slice() 、substring()这两个方法的功能都是取一个字符串的字串,且都带两个参考,第一个为起始位置,第二个为结束位置,但不包括结束 位置。这两个方法并不完全相同,不过只在参数为负数时,它们处理参数的方式才稍有不同 。
对于负数参数,slice() 方法会用字符串的长度加上参数,substring() 方法则将其作为 0 处理 (也就是说将忽略它)。
例如:
var oStringObject = new String("hello world"); alert(oStringObject.slice(-3)); //输出 "rld" alert(oStringObject.substring(-3)); //输出 "hello world" alert(oStringObject.slice(3, -4)); //输出 "lo w" alert(oStringObject.substring(3, -4)); //输出 "hel" alert(oStringObject.slice(3,-10)); //返回空字符串
?
slice(-3) 将被转换成 slice(8),而 substring(-3) 将被转换成 substring(0)。 同样,使用参数 3 和 -4 时,差别也很明显。slice() 将被转换成 slice(3, 7),与前面的例子相同,返回 "lo w"。而 substring() 方法则将两个参数解释为 substring(3, 0),实际上即 substring(0, 3),因为 substring() 总把较小的数字作为起始位,较大的数字作为终止位(但slice方法却返回空字符串)。因此,substring("3, -4") 返回的是 "hel"。这里的最后一行代码用来说明如何使用这些方法。
toLowerCase() 、toLocaleLowerCase() 、toUpperCase() 、toLocaleUpperCase()这四个方法进行大小写转换,toLowerCase()、toUpperCase() 与地区无关,而其它两种相关。一般来说,如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全,但如果用作在条件语句中比较是否等于某字符串时,要使 地区无关性方法安全。
instanceof 运算符此方法与 Java 运算符 instanceof 相似,用于判断某对象实例属于是哪种对象 。此操作只能用于引用类型。
?
变量 oStringObject 是否为 String 对象的实例:
var oStringObject = new String("hello world"); alert(oStringObject instanceof String); //输出 "true"
?