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