2-9 ECMAScript 原始类型

ECMAScript有5种原始类型(primitive type),即Undefined、Null、Boolean、Number和String。

typeof运算符

typeof运算符有一个参数,可以用于检测变量的类型。例如:

var sTemp = "test string";
alert (typeof sTemp);    //输出 "string"
alert (typeof 86);    //输出 "number"

对变量或值调用typeof运算符将返回下列值之一:

  • undefined - 如果变量是Undefined类型的
  • boolean - 如果变量是Boolean类型的
  • number - 如果变量是Number类型的
  • string - 如果变量是String类型的
  • object - 如果变量是一种引用类型或Null类型的

注释:您也许会问,为什么typeof运算符对于null值会返回"Object"。这实际上是JavaScript最初实现中的一个错误,然后被ECMAScript沿用了。现在,null被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值

Undefined 类型

如前所述,Undefined类型具有唯一的值,即undefined。当声明的变量未初始化时,该变量的默认值是undefined

var oTemp;

前面一行代码声明变量oTemp,没有初始值。该变量将被赋予值undefined,即undefined类型的字面量。可以用下面的代码段测试该变量的值是否等于undefined:

var oTemp;
alert(oTemp == undefined);

这段代码将显示"true",说明这两个值确实相等。还可以用typeof运算符显示该变量的值是undefined:

var oTemp;
alert(typeof oTemp); //输出 "undefined"

提示:值undefined并不同于未定义的值。但是,typeof运算符并不真正区分这两种值。考虑下面的代码:

var oTemp;

alert(typeof oTemp);  //输出 "undefined"
alert(typeof oTemp2);  //输出 "undefined"

前面的代码对两个变量输出的都是"undefined",即使只有变量oTemp2从未被声明过。如果对oTemp2使用除typeof之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上,因为在没有let之前,typeof运算符是百分之百安全的,但如果未声明的参数在后期被let使用就会报错,let不存在变量提升

例如,下面的代码将引发错误:

var oTemp;
alert(oTemp2 == undefined);

当函数无明确返回值时,返回的也是值"undefined",如下所示:

function testFunc() {
}

alert(testFunc() == undefined);  //输出 "true"

Null 类型

另一种只有一个值的类型是Null,它有唯一专用值null,即它的字面量。值undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等的。

alert(null == undefined);  //输出 "true"

尽管这两个值相等,但它们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象(在讨论typeof运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是null。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值