数据类型和引用数据类型

4.1 基本数据类型和引用数据类型

5种基本数据类型:

Undefined
Null
Boolean
Number
String

1.动态的属性

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

但是如果通过下面的方式来创建就不可以动态的访问属性

var name = "Nicholas";
name.age = 27;
alert(name.age);//undefined

2.复制变量

var num1 = 5;
var num2 = num1;

这两个变量可以参与任何操作而不会相互影响。

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

obj1 和 obj2 都指向同一个对象。

3.传递参数

基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。

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"

4.检测类型

typeof 操作符是确定一个变量是字符串、数值、布尔值,还是 undefined 的最佳工具。

var n = null;
var o = new Object();

alert(typeof n); //object
alert(typeof o); //object

想知道它是什么类型的对象,则通过instanceof方法:

result = variable instanceof constructor

如果变量是给定引用类型(根据它的原型链来识别;第 6 章将介绍原型链)的实例,那么instanceof 操作符就会返回 true

4.2 执行环境及作用域

var color = "blue";

function changeColor(){
    var anotherColor = "red";
    function swapColors(){
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
        // 这里可以访问 color、anotherColor 和tempColor
    }
// 这里可以访问 color 和 anotherColor,但不能访问tempColor
    swapColors();
}

// 这里只能访问 color
changeColor();

1.延长作用域链

try-catch 语句中的catchwith语句

2.没有块级作用域

for语句中的变量声明会将变量添加到当前的执行环境(在这里是全局环境)中。

for (var i=0; i < 10; i++){
    doSomething(i);
}

alert(i);   //10

1.声明变量

function add(num1, num2) {
    var sum = num1 + num2;
    return sum;
}

var result = add(10, 20); //30
alert(sum);//由于 sum 不是有效的变量,因此会导致错误

但是将上面的代码修改以下

function add(num1, num2) {
    sum = num1 + num2;
    return sum;
}

var result = add(10, 20); //30
alert(sum);//30

4.3垃圾收集

JavaScript 具有自动垃圾收集机制,找出那些不再继续使用的变
量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作。

4.4小结

 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;
 引用类型的值是对象,保存在堆内存中;
 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;
 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章