js 中的变量也分为基本数据类型与引用数据类型,除了 Object 类型外,其余的全部是基本数据类型(包括 String)。
基本数据类型存储在栈中,引用数据类型存储于堆中
基本数据类型无法新添加属性,而引用数据类型可以。
var o = {}
o.name = 'o.name'
var j = 'str'
j.name = 'j.name'
alert(o.name)
alert(j.name) // 会输出 undefined
因为 j 是基本数据类型,无法定义 name 属性,所以输出 j.name 时出现的是 undefined。
instanceof
用于判断某个变量是不是指定的类的对象。与 java 中效果一样
基本数据类型使用 instanceof 时,返回的永远是 false
var s = 'fd'
alert(s instanceof String) // false ,因为 s 是基本数据类型
var s2 = new String("fds")
alert(s2 instanceof String) // true ,因为 s2 是 String 类型的对象
全局变量与局部变量
- 局部变量除掉前面的 var 关键字,就是全局变量,无论这个局部变量是定义在哪一层。但严禁这样写。
var f1 = function(){
var f2 = function(){
var f3 = function(){
b = 'f2'
}
f3()
}
f2();
}
f1();
alert(b)
调用 f1() 后,外界可以访问到 f3 内定义的变量 b。
- if , while , for 等代码块中定义的变量,都属于全局变量
for (var i = 0; i <10; i++) {
};
alert(i)
这里输出的 i 值是 10,说明 i 值是属于全局变量,不会随着 for 循环的结束而回收。