ECMAScript 中有5中简单数据类型(也称为基本数据类型):undefined, Null , Boolean, Number和Stirng.还有1种复杂数据类型—Object,Object本质上是由一组无序的名值对组成的。ECMAScript不支持任何创建自定义类型的机制。而所有的值都将是上述6种数据类型之一。
在《JavaScript 权威指南》中说:
JavaScritpt的数据类型分为两类:原始类型(primitive)和对象类型(object)。P32
而在《JavaScript高级程序设计》中说:
ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是是简单的数据段,而引用类型值指那些可能有多个值构成的对象。
同样在:《JavaScript 权威指南》权威指南中,P48中说:我们通常将对象称为引用类型(reference type),以此来和javaScript的基本类型区分开来。依照术语的叫法:对象值都是引用(reference), 对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。
引用类型有时候也被成为对象定义,因为它们描述的是一类对象所具有的属性和方法《JavaScript高级程序设计》
<html>
<body>
<script>
//JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(Object) 《JavaScript权威指南》
//ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 《JavaScript高级程序设计》
//其实是说原始类型也就是基本类型 对象类型也就是引用类型
//基本类型值包括:Undefined, null, Boolean, number string
//基本类型的比较,
var number1 = 1;
var number2 = 1;
alert(number1 == number2);
var string1 = "hello";
var string2 = "hello";
alert(string1 == string2);
//引用类型有: object类型,Array类型, Data类型,RegExp类型, Function类型,基本包装类型, 单体内置对象
//引用类型的比较(也可以说是对象类型的比较)
//1.对象的比较并非值得比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的。
var o = {x : 1}; //使用字面量常量定义的一个对象
var p = {x : 1};
//alert( o == p); //false
var a = []; //两个单独的空数组,对于JS来说数组是对象
var b = [];
//alert( a == b); //false
//下面看看下来有什么区别:
//2.定义了一个函数,切记:函数是对象,函数名是指针
function sayName()
{
}
var sayName1 = sayName; //指针指向了同一个对象
var sayName2 = sayName;
//alert(sayName1 == sayName2); //true
//alert(sayName1);
//alert(sayName2);
//新对象是使用new操作符后跟一个构造函数来创建的
//构造函数(构造函数本身也就是一个函数,只不过该函数是出于创建新对象的目的定义的)
var sayName3 = new sayName();
var sayName4 = new sayName();
//alert(sayName3 == sayName4); //false,sayName3 和 sayName4是不同的对象
//alert(sayName3);
//alert(sayName4);
//总结:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等
//下面分别给它们定义添加一个属性,看看有什么区别
sayName1.name = "lvhuizhen";
//alert(sayName1.name);
//alert(sayName2.name); //sayName2.name也等于了"lvhuizhen"
//为什么呢?
//因为sayName1和sayName2引用的是同一个对象sayName
sayName3.name = "meimei";
//alert(sayName3.name); //"meimei"
//alert(sayName4.name); //而这个sayName3却是undefined
//这是为什么呢?
//因为sayName3和sayName4分别是new的不同对象
</script>
</body>
</html>
先总结到这里,后面再继续深入。