JavaScript变量的值及其数据类型 可以在脚本的生命周期内改变。
EC,AS次日普通变量可能包含两种不同数据类型的值:基本类型和引用类型值。
基本类型:简单的数据段。 引用类型:可能有多个值构成的对象。
5中基本数据类型:Undefined、Null、Boolean、Number、String。
引用类型的值是保存在内存中的对象。JavaScript不允许直接访问内存中的位置,不能直接操作对象的内存空间。在操作对象时,实际上操作的是对象的引用而不是实际对象。
引用类型的值是按引用访问的。
当从一个变量向另一个变量赋值引用类型的值时,变量对象中存储的值也会被复制。这个值得副本是一个指针,指针指向存储在堆中的一个对象。复制结束后,两个变量引用的是同一个对象。也就是说,改变堆中的对象值,两个变量中对象值均会改变;改变一个变量的值,另一个变量的值也会改变。
var obj1 = new Object( );
var obj2 = obj1;
obj1.name = “Book”;
alert(obj2.name);//输出结果为Book。
传递参数:
ECMScript中所有函数的参数按值传递。(把函数外部的值赋值给函数内部的参数,如同把值从一个变量复制到另一个变量)。
向参数传递基本类型时,被传递的值会被复制给一个局部变量;向参数传递引用类型的值时,值得内存地址会被复制给一个局部变量。局部变量的变化会引起引用类型值得变化,不会引起基本类型值得变化。
1.
Function addTen(num){
num +=10;
return num;
}
var count = 20;
var result =addTen(count);
alert(count);//20
alert(result);//30
2.
function setName(obj){
obj,name = “Boook”;
}
var person = new Object();
setName(person);
alert(person.name);//Book
3.
function setName(obj){
obj.Name = “Book”;
obj = new Object();
obj.Name= “HAHA”;
}
var person= new Object();
serName(person);
alert(person.Name);//Book
检测类型:
Typeof操作符:确定一个变量是何种数值。
var a = “Nick”;
var b = true;
var c = 22;
var u;
var n = null;
var o = object;
alert(typeof a);//String
alert(typeof b);//boolean
alert(typeof c); //number
alert(typeof u);//undefined
alert(typeof n);//object 若变量值是一个对象或null,typeof对象返回object
alert(typeof o);//object
作用域链
延长作用域链:
在作用域链前端临时增加一个变量对象,该变量对象会在代码执行后被移除。
try-catch语句的catch块
with语句