
二、基本类型
ECMAScript有5种基本类型,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。ECMA-262把术语类型定义为值的一个集合,每种基本类型定义了它包含的值的范围及其字面量表示形式。
ECMAScript提供了typeof运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种基本类型:如果它是基本类型,还可以判断它表示哪种基本类型。
基本数据类型和操作符typeof我们在前面的博文中也经常使用到。详细了解的话可以参考这篇文章:详解JavaScript的变量和数据类型。
三、类型转换
所有程序设计语言最重要的特征之一是具有进行类型转换的能力。ECMAScript给开发者提供了大量简单的类型转换方法。大部分类型具有进行简单转换的方法,还有几个全局方法可以用于更复杂的转换。无论哪种情况,在ECMAScript中,类型转换都是简短的一步操作。
(1)转换成字符串
ECMAScript的Boolean值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
例如,要获得字符串的长度,可以采用下面的代码:
var sbox = "red"; document.write(sbox.length);//输出3尽管 "red" 是基本类型的字符串,它仍然具有属性length,用于存放字符串的大小。总而言之,3 种主要的原始类型Boolean 值、数字和字符串都有 toString() 方法,可以把它们的值转换成字符串。您也许会问,“字符串还有toString()方法吗,这不是多余吗?”是的,的确如此,不过ECMAScript定义所有对象都有toString()方法,无论它是伪对象,还是真对象。因为String类型属于伪对象,所以它一定有toString()方法。
var bage=false; document.write(bage.toString());//输出"false"2)Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法),在默认模式中,无论最初采用什么表示法声明数字,Number 类型的 toString() 方法返回的都是数字的十进制表示。因此,以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的。如下所示:
var iNum1 = 10; var iNum2 = 10.0; document.write(iNum1.toString());//输出 "10" document.write(iNum2.toString());//输出 "10"采用Number类型的 toString()方法的基模式,可以用不同的基输出数字,例如二进制的基是2,八进制的基是8,十六进制的基是16。
var iNum = 10; document.write(iNum.toString(2));//输出 "1010" document.write(iNum.toString(8));//输出 "12" document.write(iNum.toString(16));//输出 "a"(2)转换成数字
var iNum1 = parseInt("12345red"); var iNum2 = parseInt("0xA"); var iNum3 = parseInt("56.9"); var iNum4 = parseInt("red"); document.write("iNum1="+iNum1);//返回12345 document.write("iNum2="+iNum2);//返回10 document.write("iNum3="+iNum3);//返回56 document.write("iNum3="+iNum4);//返回NaNparseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的。
var iNum1 = parseInt("AF", 16); var iNum2 = parseInt("10", 2); var iNum3 = parseInt("10", 8); var iNum4 = parseInt("10", 10); document.write("iNum1="+iNum1);//返回175 document.write("iNum2="+iNum2);//返回2 document.write("iNum3="+iNum3);//返回8 document.write("iNum4="+iNum4);//返回102)parseFloat()方法
var fNum1 = parseFloat("12345red"); var fNum2 = parseFloat("0xA"); var fNum3 = parseFloat("11.2"); var fNum4 = parseFloat("11.22.33"); var fNum5 = parseFloat("0102"); var fNum6 = parseFloat("red"); document.write("iNum1="+iNum1);//返回12345 document.write("iNum2="+iNum2);//返回NaN document.write("iNum3="+iNum3);//返回11.2 document.write("iNum4="+iNum4);//返回11.22 document.write("iNum5="+iNum5);//返回102 document.write("iNum6="+iNum6);//返回NaN(3)强制类型转换
var oStringObject = new String("hello world"); document.write(oStringObject instanceof String);//输出 "true"这段代码问的是“变量oStringObject是否为 String 对象的实例?”oStringObject的确是 String对象的实例,因此结果是 "true"。尽管不像typeof方法那样灵活,但是在typeof方法返回 "object" 的情况下,instanceof方法还是很有用的。
var box="Lee"; var box2=box; box2="Amy";//重新赋值后,两个基本类型变量操作时互不影响,还是保持各自的独立性 document.write("box2="+box2+"<br/>"); document.write("box="+box);输出的结果为:Amy

var box=new Object(); box.name="Lee"; var box2=box;//把引用地址值复制给box2 box2.name="Amy";//重新赋值后,两个引用类型都指向同一个对象。name属性只要发生改变都会更改原值。 document.write(" box2.name="+box2.name+"<br/>"); document.write("box.name="+box.name);输出的结果为:Amy

以上就是关于JavaScript基本类型和引用类型的详细介绍,希望对大家的学习有所帮助。