21天(js高程)-第4天
1,注意:用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中用var定义一个变量,那么这个变量在函数退出后就会被销毁。
2,省略var操作符可以定义全局变量。但在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。
3,可以用一条语句定义多个变量,变量之间用逗号隔开。
4,在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误。
3.4数据类型
ECMAScript中有5种基本数据类型(简单数据类型):Undefined,Null,Number,Boolean,String。
还有1种复杂数据类型:Object。Object本质上是由无序的名值对组成的。
所有值最终都将是上述6种数据类型之一(ECMAScript数据类型具有动态性)。
3.4.1 typeof操作符
typeof是操作符而不是函数,用于检测给定变量的数据类型。
调用typeof null,会返回"object",因为特殊值null被认为是一个空的对象引用。
从技术角度讲,函数在 ECMAScript 中是对象,不是一种数据类型。
3.4.2 Undefined类型
在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
var message;//这个变量声明后默认取得了undefined值。
alert(message===undefined)//true
ECMA-262 第 3 版之前的版本中并没有规定这个值。第 3 版引入这个值是为了正式区分空对象指针与未经初始化的变量。
对于尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(对未经声明的变量调用delete不会导致错误,但这样做没什么实际意义,而且在严格模式下确实会导致错误)。
var message;
alert(message)//显示“undefined”
alert(age);//发生错误
困惑:对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined值。
var message;
alert(typeof message) ;//"undefined"
alert(typeof age);//"undefined"
3.4.3 Null类型
null值表示一个空对象指针。
var car=null;
alert(typeof car);//"object"
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
if(car!=null){
//执行一些操作;
}
实际上,undefined值是派生自null值的,因此ECMA-262规定他们的相等性测试要返回true;
alert(null==undefined);//true;
位于null和undefined之间的相等操作符(==)总是返回true,不过要注意的是,这个操作符出于比较的目的会转换其操作数。
而alert(null===undefined); //false
只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。
3.4.4 Boolean类型
该类型只有两个值:true 和 false;
这两个值和数字值不是一回事,true不一定等于1,而false不一定等于0;
注意:Boolean类型的字面值true和false是区分大小写的,也就是说,True和False(以及其他形式的混合大小写形式)都不是Boolean值,只是标识符。
ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()
var message="Hello World!";
var messageAsBoolean=Boolean(message);
除了以下几个转换为false值以外其他都为true:
1,""(空String);2,null(空对象);3,Number(0和NaN);4,undefined;
这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要。
var message="Hello World!";
if(message){
alert("Value is true");
}