5种简单数据类型(基本数据类型)
undefined null boolean number string (还有一种复杂的数据类型:object)
变量的两种不同的数据类型:基本类型(简单数据段)、引用类型(可能由多个值构成对象)
1、基本类型
var num1 = 5; var num2 = num1;
num1与num2完全独立,不会相互影响
2、引用类型——按引用访问、保存在内存中的对象(js不允许直接访问内存)
var person1 = new object(); var person2 = person1;
person1和person2实际引用一个对象,互相影响
访问变量有按值和按引用两种方式,而参数只能按值传递
function addTen(num){ num+=10; return num; } var count = 20; var result = addTen(count); alert(count); //20 alert(result); //30
在函数内部重写obj时,变量引用的局部对象,函数执行完立即销毁
function setName(obj){ obj.name = "Ni"; obj = new Object(); obj.name = "Ge"; } var person = new Object(); setName(person); alert(person.name); //"Ni"
typeof和instanceof
typeof操作符返回数据类型(返回字符串):undefined,boolean,string,number,object,function
var s = "Ni"; var b = true; var i = 22; var u = null; var o = new Object(); var n; var person = new Object();
typeof s //string
typeof b //boolean
typeof i //number
typeof u //object
typeof o //object
typeof n //undefined
person instanceof Object //true
pattern instanceof RegExp //true
执行环境及作用域
1、全局执行环境: window对象
全局执行环境的变量对象始终都是作用链域中的最后一个对象
2、执行环境: 每个函数都有自己的执行环境,执行环境定义了变量或函数有权访问的其他数据
3、作用域链的用途:代码在一个环境中执行时,创建对象的一个作用域链,保证有序
var color = "blue"; function changeColor(){ if(color == "blue"){ color = "red"; }else{ color = ""blue; } }
函数changeColor()的作用域链包含两个对象:自己的变量对象arguments,全局环境变量对象color
var color = "blue"; function changeColor(){ var anotherColor = "red"; function swapColors(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; //这里可以访问color,anotherColor,tempColor } //这里可以访问color,anotherColor }//这里可以访问color
4、没有块级作用域
由if,for语句创建的变量i即使在for循环结束后,也依旧存在于循环外部的执行环境中
5、var声明的是局部变量,不加var是全局变量。如果局部环境中存在同名标识符,就不会使用位于父环境中的标识符