/*
ECMAScript變量可能包含兩種不同數據類型的值:基本類型值和引用類型值。
基本類型值指的是那些保存在棧內存中的簡單數據段,即這種值完全保存在內存中的一個位置。
而引用類型值則是指那些保存在堆內存中的對象,意思是變量中保存的實際上是一個指針,這個指針指向內存中的另一個位置,該位置保存對象。
5中基本數據類型:Undefined、Null、Boolean、Number和String.
這5種基本數據類型的值在內存中佔有固定大小的空間,因此可以把它們的值保存在棧內存中。
這樣可以提高查詢的速度。對於保存基本類型值的變量,我們說它們是按值訪問的,因爲我們操作的是它們實際保存的值。
如果賦給變量的是一個引用類型的值,則必須在堆內存中爲這個值分配空間。由於這種值得大小不固定,因此不能把它們保存到佔內存中。
但內存地址的大小是固定的,因此可以將內存地址保存在棧內存中。這樣,當查詢引用類型的變量時,就可以首先從棧中讀取內存地址,然後再
“順藤摸瓜”地找到保存在堆中的值。對於這種查詢變量值的方式,我們把它叫做按引用訪問,因此我們操作的不是實際的值,而是被那個值所引用的對象。
*/
- /*
- //<strong>4.1.1 動態屬性</strong>
- //引用類型
- var person = new Object();
- person.name = "Nicholas";
- alert(person.name);//Nicholas
- //基本類型
- var name = "Nicholas";
- name.age=27;
- alert(name.age);//undefined
- //總結:對於引用類型的值,我們可以爲其添加屬性和方法,也可以改變和刪除其屬性和方法。
- //但是,我們不能給基本型類的值添加屬性,儘管這樣做不會導致任何錯誤。
- */
- /*
- //<strong>4.1.2 複製變量值</strong>
- var num1=5;
- var num2=num1;
- alert(num2);
- var obj1=new Object();
- var obj2 = obj1;
- obj1.name="Nicholas";
- alert(obj2.name);
- */
- <strong>//4.1.3 傳遞參數</strong>
- /*
- 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
- */
- <strong>//4.1.4 檢測類型</strong>
- //基本類型用 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);