JavaScript数据类型
- 基本类型(值类型):
num string boolean
- 复合类型(引用类型):对象 函数;
- 空类型:
undefined null
值类型
- 存放在栈中,所开辟的内存中存的是值本身
- 值类型赋值特点:
将变量内的数据全部拷贝一份,存储给新变量,如var num=12;var num2=num;
表示变量num存储的数字是12,然后把数据12拷贝一份,再将拷贝数据存到nmu2中,这样一来内存中就有两个数据副本
var num2=20;
console.log(num);//12,num2的改变并不会影响num的值
值类型与引用类型作为参数传递的特征
- 值类型
作为函数的参数,就是将参数的数据拷贝一份传递给函数定义中的参数
function f(num){}
var n=5;
f(n);
执行过程如下
1. 函数在调用时,首先将参数中的数据拷贝一份,即将数字5拷贝一份
2. 拷贝完成后,在跳转到函数体前把拷贝得到的数据5赋值给num
,所以真正进入到函数体后num=5
已存在
3. 接着开始执行函数体的每条语句
值类型作为函数参数传递的特征
函数内与函数外是两个不同变量,仅仅是值相等,内存上完全独立,并不会彼此影响
引用类型
- 引用类型中变量存放的是内存地址,不存值本身,这个内存地址指向堆中变量
- 引用类型赋值特点:
var o={name:"小张",age:18};
var p=o;
由于引用类型赋值后变量
o
和p
是在栈中存放的内存地址一样,则通过这个地址指向是堆中的对象自然是同一个,所以o
和p
中任何一个改变name
和age
的值,另一个的name
和age
值也会跟着变化
p.name="小陈";
console.log(o.name);//输出:小陈
引用类型作为参数传递的特征
函数内与函数外是两个不同的变量,但是指向同一个对象,因此函数内部允许修改函数外部的对象的数据
js的动态特性
- 在js中,一个对象需要属性就利用”对象.属性名=值”的方式为其添加,只要赋值成功,对象就新增了属性
var o={}; o.name="chen";
对象属性的访问形式
- 点语法:
o.name
- 关联数组:
o["name"]
- 注意:使用关联数组访问时中括号里的一定要是字符串或者已声明的字符串变量.
var o={}; o.name="小张";//点语法访问 console.log(o["name"]);//结果为小张 console.log(o[name]);//结果为undefined
- 这里之所以是undfined是因为name没有引号,解释器会把name看成变量,那么实际效果就成
o[null]
,所以为undfined 代码再改一下
var name="name"; console.log(o[name]);//结果为小张
以下是经典的使用关联数组的案例
function mix(o1,o2){ for(var k in o2){//把o2的属性以字符串的形式提取出来存在k中 o1[k]=o2[k]; } }
- 点语法: