JavaScript中的数据类型可分为两大类
1.值类型:number(数字类型),string(字符串类型),boolean(布尔类型),undefined,null,(symbol ES6新增)
2.引用类型:object(对象),array(数组),function(函数)
值类型与引用类型的区别
值类型:在存储时,变量中存储的是值本身
引用类型:在存储时,变量中存储的仅仅是引用(地址)
堆与栈
栈:由操作系统自动分配释放,存放函数的参数值,局部变量的值等
堆:存储复杂类型,一般由程序员释放,若程序员不释放,由垃圾回收机制回收
基本类型在内存中的存储
var str='苍茫的天涯';
var str1=str;
str='我的爱';
复杂类型在内存中的存储
var p1={
name:'张三'
}
var p2=p1;
p2.name='李四';
基本类型作为函数的参数
var num1=55;
var num2=66;
function fn (num,num1) {
num=100;
num1=100;
num2=100;
console.log(num); // 100
console.log(num1); // 100
console.log(num2); // 100
}
fn(num1,num2);
console.log(num1); // 55 num1作为参数传入函数fn,值被改变仅限在函数fn内,当函数执行后被销毁,num1的值不变
console.log(num2); // 100 num2的值在函数体内被永久改变,即在外部访问也是改变后的值
console.log(num); // error (num is not defined) 全局中没有名为num的变量被声明
复杂类型作为函数的参数
function Person (name) {
this.name=name;
}
function f1 (person) {
person.name='ls';
person=new Person('ww');
console.log(person.name); // ww
}
var p=new Person('zs');
console.log(p.name); // zs
f1(p);
console.log(p.name); // ls 参数person指向新的地址,p的指向并没有改变,p的属性name的值为 ls