JavaScript数据类型详解

  要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功。从Javascript数据类型开始,我将对Javascript知识体系进行系统的梳理。

  今天的主题是Javascript数据类型。

  ECMAScript中有5中简单的数据类型,也即基本数据类型:Undefined、Null、Boolean、Number和String。还有一种复杂数据类型:Object,Object本质上是由一组无序的名值对组成的。

  1、typeof操作符

  首先要介绍的是typeof操作符,因为ECMAScript是松散类型的,所以需要一种方式来检测给定变量的数据类型,就是typeof了。对一个值使用typeof操作符可能返回以下某个字符串。

"undefined"——如果这个值未定义,后面会详细说明

"boolean"——如果这个值是布尔值

"string"——如果这个值是字符串

"number"——如果这个值是数值

"object"——如果这个值是对象或者null

"function"——如果这个值是函数

  下面是几个使用typeof操作符的例子:

var typeText = "Javascript"; alert(typeof typeText); //"string" alert(typeof (typeText)); //"string" alert(typeof 123); //"number"

  一定注意,typeof是操作符,不是函数,所以上面第三行的代码中的括号,虽然可以使用,但不是必需的,加上括号反而会让人误解。

  2、Undefined类型

  这是第一个一定要详细说明的Javascript数据类型。Undefined类型只有一个值,也即undefined。

  在使用var声明变量但是未对其进行初始化的时候,这个变量的值就是undefined。例如:

var text; alert(text == undefined); //true

  这里声明了text变量,但是并未对其进行初始化,所以比较这个变量和undefined字面量,结果表明它们是相等的。其实上面的语句与下面的例子是等价的:

var text = undefined; alert(text == undefined); //true

但是,实际上我们并没有必要在声明变量的时候显式的将其初始化为undefined。

令人困惑的是,对未初始化的变量执行typeof操作,会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined值。

var text; //这个变量声明后默认获得undefined值 //下面这个变量没有声明 //var message; alert(typeof text); //"undefined" alert(typeof message); //"undefined" 

3、Null类型

  Null类型是要和undefined类型对比说明的。首先,Null类型也是只有一个值的数据类型。如其他语言一样,null只表示一个空对象指针,这也正是下面代码中用typeof才做服检测null值时会返回“object”的原因。如下所示:

var text = null; alert(typeof text); //"object"

  如果声明的一个变量明确的是要在将来保存一个对象,显式的将其初始化为null是一个好习惯,到时候只要直接检查该变量的值是不是null值就可以判定该变量是不是已经保存了一个对象的引用了。

  实际上,undefined值是派生自null值的,所以它们的相等行测试返回都是true:

alert(null == undefined); //true 

  在介绍其他数据类型之前,我先比较这两个数据类型的深层次的不同点。

  学习了《Javascript高级程序设计》和阮一峰大神的博客之后,我对这两者的区别有了更深刻的认识:

  null表示"没有对象",即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype); // null

  undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

var i; i // undefined function f(x){console.log(x)} f() // undefined var o = new Object(); o.p // undefined var x = f(); x // undefined  

  4、Boolean类型

  Boolean类型只有两个字面值:true和false。这两个值是区分大小写的,并且这两个值与数字值1和0是两回事。

  虽然Boolean类型只有两个字面值,但是ECMAScript所有类型都可以转换为与Boolean中的这两个字面值等价的值,只需要调用Boolean()函数即可:

var val = "Hi"; var valAsBoolean = Boolean(val);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22c62b3bbc9372e1b57585d93ecfed38.html