发表于: 2019-03-29 21:55:49
1 846
今天完成的任务
看了红宝书的1-3章节 整理如下
变量
var a;
像这样未经过初始化的变量,会保存一个特殊的值 --underfined
var message ="hi":声明变量,同时给变量一个初始值!
像这样初始化变量并不会把它"标记"为字符串类型;初始化的过程就是给变量赋一个值那么简单.因此,可以在修改变变量值的同时修改值的类型,如下:
message = 100;//有效,但不推荐
变量基本的作用域问题:
用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁!!
function test(){
var message = "hi";
}
test();
alert(message);//错误!!
上面,变量message是在函数中使用var定义的。当函数被调用时,就会创建该变量并为其赋值。而在此之后,这个变量又会被立即销毁!!
function test(){
message = "hi";
}
test();
alert(message);
上面,没有用var操作符,因此message就成了全局变量。这样,只要调用一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问!!
*虽然省略var操作符可以定义全局变量,但这也是我们不推荐的做法.因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略var操作符,
也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误!
数据类型
ECMAScript中有五种简单数据类型(也叫基本数据类型):Undefined,Null,Boolean,Number和String
还有一种复杂数据类型--Object,Object本质上是由一组无序的名值对组成的(不是很明白)。ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述6种数据类型之一。ECMAScript数据类型具有动态性。
typeof操作符
对一个值是有typeof操作符可能返回下列某个字符串:
"undefined" ——如果这个值未定义;
"boolean"——如果这个值是布尔值;
"string"——如果这个值是字符串;
"number"——如果这个值是数值;
"object"——如果这个值是对象或者null;
"fuction"——如果这个值是函数;
var message = "some string";
alert(typeof message);//string
alert(typeof(message));//string
alert(typeof 95);//number
以上几个例子说明,typeof操作符的操作数可以是变量,也可以是数值字面量。注意,typeof是操作符而不是函数,因此例子中的圆括号可以使用,但不是必须的!
调用typeof null会返回"object".因为特殊值null被认为是空的对象引用.
从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性
因此通过typeof操作符来区分函数和其他对象是有必要的!
underfined类型
underfined类型只有一个值,在var声明变量但未对其加以初始化时,这个变量的值就是underfined
var message;
alert(message == underfined)//true
同:
var message = undefined;
alert(message == undefined)//true
一般而言,不存在需要显示地把一个变量设置为undefined值的情况。字面值undefined的主要目的是用于比较,而ECMA-262第3版之前的版本中并没有规定这个值.第三版引入这个值是为了正式区分空对象指针与未经初始化的变量
对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回underfined值
即使未初始化的变量会自动被赋予undefined值,但显示的初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回“undefined”值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化
null类型
null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度看,null值表示一个空对象指针,而这也正是是有typeof类型操作符检测null值时会返回object的原因
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true
经管null和undefined有这样的关系,但它们的用途完全不同。如前所述,无论在什么情况下都没有必要把一个变量的值显示地设置为underfined,可是同样的规则对null却不试用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助与进一步区分null和undefined
Boolean类型
boolean类型是ECMAScript中使用得最多的一种类型,该类型只有俩个字面值:true和false。
要将一个值转换为其对应的Boolean值。可以调用转型函数Boolean()
这些转换规则对理解流程控制语句(如if)自动执行相应的Boolean转换非常重要.如下:
var message = "Hello world";
if(message){
alert("aaaa");
}
评论