Javascript变量的数据类型
Javascript有6种基本类型,也叫基础类型或元类型分别是:
1. undefined 未定义 值类型
未声明的变量或声明过但未赋值的变量的值为undefined。也可以显式或隐式的给变量赋值为undefined
2. number 数值 值类型
除赋值操作外,只有数值与数值的运算结果是数值;一些函数或方法的返回值是数值
3. string 字符串 值类型
不能直接读取或修改字符串中的单一字符,字符串在赋值运算中会按引用类型的方式来处理
4. boolean 布尔值 值类型
true/false
5. function 函数 引用类型
Javascript中的函数存在多重含义,包括函数、方法、构造器、类及函数对象
6. object 对象 引用类型
基于原型继承的面向对象,因为不具备对象系统的全部特性,Javascript通常被称为基于对象而非面向对象的语言。
任何一个变量或值的类型都可以使用typeof运算得到。typeof关键字是保留关键字,其调用形式如下:
alert(typeof str)
//或者
alert(typeof(str))
变量的声明
Javascript中变量的声明有两种方法:
1. 显示声明
var 关键字进行声明即显示声明如:
当然函数声明及异常捕获字句中声明的异常对象也是显示声明:
}
try{
}
catch(ex){
}
2. 隐式声明
隐式声明通常发生在不使用关键字var的赋值语句中,如:
解释器对隐式声明的理解为:如果变量未被声明,则先声明该变量并立即赋值;如变量已声明,则该语句是赋值语句
变量的作用域
作用域有全局作用域及局部作用域,全局变量的作用域当然是全局作用域(貌似是废话),函数内部声明的变量是局部变量,作用域也
是函数体这一局部内。
function foo(){
var str = "def";
document.write (str);
}
foo(); //输出def
document.write (str); //输出abc
全局变量的声明可以不使用var 关键字,但在局部变量的声明中一定要使用var关键字,否则会视为对全局变量的引用或声明了全局
变量,如下代码所示:
function foo(){
str = "def";
document.write (str);
}
foo(); //输出def
document.write (str); //输出def
Javascript 没有块级作用域一说,函数中声明的变量在整个函数中都是有定义的,看下面的代码:
document.write(str); //语句A
var str = “abc”;
document.write(str); //语句B
document.write(i); //语句 C
for(var i = 0; i< 4; i++){
}
document.write(i); //语句 D
}
foo(); //A输出 undefined,B输出 abc ,C输出 undefined,D 输出 4
在变量声明之前输出,出现 undefined,是因为Javascript 会将所有的变量及函数声明提升到作用域的顶部,提升只会提升声明,
而赋值不会提升,另外注意:函数提升,只会提升函数的声明方式,表达式形式的则不会提升。