簡單類型和復雜類型的區(qū)別
簡單數(shù)據(jù)類型婉徘,基本類型/值類型,==復雜類型又叫做引用類型==
==值類型==:簡單數(shù)據(jù)類型儒鹿,基本數(shù)據(jù)類型几晤,在存儲時,==變量中存儲的是值本身==圾浅,因此叫做值類型憾朴。
==引用類型==:復雜數(shù)據(jù)類型众雷,在存儲時做祝,==變量中存儲的僅僅是地址(引用)==鸡岗,因此叫做引用數(shù)據(jù)類型。
** 堆和棧**
堆椬莞簦空間分配區(qū)別:
1炮姨、棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放 ,存放函數(shù)的參數(shù)值绅作,局部變量的值等蛾派。其操作方式類似于數(shù)據(jù)結構中的棧洪乍;
2、堆(操作系統(tǒng)): 存儲復雜類型(對象)岂贩,一般由程序員分配釋放巷波, 若程序員不釋放,由垃圾回收機制回收锉屈,分配方式倒是類似于鏈表垮耳。
注意:
JavaScript中沒有堆和棧的概念,此處我們用堆和棧來講解儡炼,目的方便理解和方便以后的學習查蓉。
基本類型在內(nèi)存中的存儲
復雜類型在內(nèi)存中的存儲
基本類型作為函數(shù)的參數(shù)
復雜類型作為函數(shù)的參數(shù)
// 下面代碼輸出的結果?
function Person(name,age,salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
function f1(person) {
person.name = "ls";
person = new Person("aa",18,10);
}
var p = new Person("zs",18,1000);
console.log(p.name);//zs
f1(p);
console.log(p.name);//ls
案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
// 數(shù)據(jù)類型
// 簡單數(shù)據(jù)類型豌研,基本數(shù)據(jù)類型/值類型
// Number String Boolean Null Undefined
// 復雜數(shù)據(jù)類型唬党,引用類型
// Object
// 數(shù)據(jù)在內(nèi)存中的存儲:
// 簡單數(shù)據(jù)類型驶拱,存儲在內(nèi)存中的棧上
// 復雜數(shù)據(jù)類型晶衷,存儲在內(nèi)存中的堆上
// 訪問簡單數(shù)據(jù)類型比訪問復雜數(shù)據(jù)類型速度快
// 1.簡單類型在內(nèi)存中如何存儲?
// var n1=10;
// var n2=20;
// n2=n1;
// n1=20;
// console.log(n1,n2);// 20 10
// 2.復雜數(shù)據(jù)類型在內(nèi)存中如何存儲晌纫?
// Object 所有的對象都是基于Object
// function Person(name,age) {
// this.name=name;
// this.age=age;
// this.sayHi=function() {
// console.log(this.name+':hello');
// }
// }
// var p1=new Person('zs',18);
// console.log(p1.name); //zs
// p1.sayHi(); //zs:hello
// var p2=p1;
// p2.sayHi(); //zs:hello
//3.簡單類型數(shù)據(jù)作為函數(shù)的參數(shù)税迷,在內(nèi)存中如何存儲?
//簡單類型數(shù)據(jù)存儲在內(nèi)存中的棧上
// function fn(a,b) {
// a=a+1;
// b=b+1;
// console.log(a); //11
// console.log(b); //21
// }
// var x=10;
// var y=20;
// fn(x,y); //調(diào)用函數(shù)時將x锹漱、y的值賦給a箭养、b
// //x、y的值不會受函數(shù)內(nèi)部執(zhí)行過程的影響哥牍,a和b是兩個獨立的變量
// console.log(x); //10
// console.log(y); //20
//4.復雜 類型數(shù)據(jù)作為函數(shù)的參數(shù)毕泌,在內(nèi)存中如何存儲?
// function Person(name,age) {
// this.name=name;
// this.age=age;
// this.sayHi=function() {
// console.log(this.name+':hello');
// }
// }
// var P=new Person('zs',18);
// function fn(person) {
// person.name='ls';
// person=new Person('ww',20);
// console.log(person.name); //ww
// }
// fn(P);
// console.log(P.name); //ls
//5. 數(shù)組也是復雜數(shù)據(jù)類型
// 對數(shù)組排序嗅辣,從小到大--冒泡排序
function sort(array) {
//外層循環(huán)控制趟數(shù)
for(var i=0;i<array.length-1;i++) {
//假設排好序了
var isSort=true;
//內(nèi)層循環(huán)控制比較的次數(shù)
for(var j=0;j<array.length-1-i;j++){
if (array[j]>array[j+1]) {
isSort=false;
//交換位置
var t=array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
//判斷是否排好了
if (isSort) {
break;
}
}
// return array;
}
// var array=[3,44,2,66,88];
// function fn(arr) {
// arr[0]=-1;
// }
// fn(array);
// console.log(array);
var array=[3,44,2,66,88];
var r=sort(array);
console.log(r);
console.log(array);
</script>
</head>
<body>
</body>
</html>