4.1 基本类型和引用类型的值

4.1 基本类型和引用类型的值

ECMAScript变量包括两种不同数据类型的值
  • 基本数据类型:Undefined、Null、Boolean、Number、String
  • 引用数据类型:是一种数据结构,它的值是引用类型的一个实例。(第五章会有具体介绍)
4.1.1 动态属性
1.基本数据类型不能添加属性和方法,如果这样做,当访问该属性和方法的时候,得到的则是undefined。
var name = "kaikai"; //创建变量name,并赋值'kaikai'
name.age = 27; // 为name变量添加age属性,并赋值'27'
alert(name.age); // 结果:"undefined"

2.引用类型的值可以添加属性和方法
var person = new Object(); // 创建对象,并保存在 person变量中
person.name = 'kaikai'; // 为person对象添加name属性
alert(person.name); // 结果:"kaikai"
4.1.2 复制变量值
1. 基本数据类型
var num1 = 5;
var num2 = num1;

如图4-1,当复制变量时,会在变量对象上创建一个新的值,num1和num2在操作过程中互不影响

4.1 基本类型和引用类型的值

2.引用类型

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name);  //"Nicholas"

如图4-2,引用类型是存储在堆中,obj2复制obj1值的时候,同样是将obj1的值复制到了新变量obj2的对象空间中。但是,这个“值”实际上是一个指针,它指向的是存储在堆中得对象,这个对象才是变量真正的内容。
所以,obj1和obj2实际上引用的事同一个对象,当对其中一个做出修改时,其实另一个也发生了相应的改变

4.1 基本类型和引用类型的值

4.1.3 传递参数
js中所有函数的参数都是按值传递的,与4.1.2复制变量值同理
4.1.4 检测类型
typeof可检测:string、number,boolean,undefined, object
对象和null的返回值都是object
instanceof可以检测变量是否是引用类型,如果是则返回true,否则返回false
alert(person instanceof Object); // 变量 person 是 Object 吗?
alert(colors instanceof Array); // 变量 colors 是 Array 吗?
alert(pattern instanceof RegExp); //变量pattern是RegExp吗?

4.1 基本类型和引用类型的值