/*
ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。
基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。
而引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
5中基本数据类型:Undefined、Null、Boolean、Number和String.
这5种基本数据类型的值在内存中占有固定大小的空间,因此可以把它们的值保存在栈内存中。
这样可以提高查询的速度。对于保存基本类型值的变量,我们说它们是按值访问的,因为我们操作的是它们实际保存的值。
如果赋给变量的是一个引用类型的值,则必须在堆内存中为这个值分配空间。由于这种值得大小不固定,因此不能把它们保存到占内存中。
但内存地址的大小是固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变量时,就可以首先从栈中读取内存地址,然后再
“顺藤摸瓜”地找到保存在堆中的值。对于这种查询变量值的方式,我们把它叫做按引用访问,因此我们操作的不是实际的值,而是被那个值所引用的对象。
*/
/* //4.1.1 动态属性 //引用类型 var person = new Object(); person.name = "Nicholas"; alert(person.name);//Nicholas //基本类型 var name = "Nicholas"; name.age=27; alert(name.age);//undefined //总结:对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。 //但是,我们不能给基本型类的值添加属性,尽管这样做不会导致任何错误。 */
/* //4.1.2 复制变量值 var num1=5; var num2=num1; alert(num2); var obj1=new Object(); var obj2 = obj1; obj1.name="Nicholas"; alert(obj2.name); */
//4.1.3 传递参数 /* function addTen(num){ num+=10; return num; } var count=20; var result=addTen(count); alert(count);//20 alert(result);//30 */ /* function setName(obj){ obj.name="Nicholas"; } var person = new Object(); setName(person); alert(person.name);//Nicholas */ /* function setName(obj){ obj.name="Nicholas"; obj=new Object(); obj.name="Greg"; } var person = new Object(); setName(person); alert(person.name);//Nicholas */
//4.1.4 检测类型 //基本类型用 typeof 检测 var s = "Nicholas"; var b = true; var i = 22; var u; var n =null; var o = new Object(); alert(typeof s);//string alert(typeof b);//boolean alert(typeof i);//number alert(typeof u);//undefined alert(typeof n);//object alert(typeof o);//object //引用类型 result=variable instanceof constructor alert(person instanceof Object); alert(colors instanceof Array); alert(pattern instanceof RegExp);