JavaScript数据类型

数据类型

ECMAScript 中有5中简单数据类型:Undefined、Null、Boolean、Number & String。一种复杂数据类型:Object

1.3.1 typeof操作符

用于检测给定变量的数据类型。返回6中类型:undefined、boolean、string、number、object、function。

console.log(typeof null);     //Object

PS: 特殊值 null 调用 typeof 会返回 Object

1.3.2 Undefined类型

Undefined 类型只有一个值:undefined。声明变量但未初始化的变量的值就是 undefined。

var box;
console.log(typeof box);      //Undefined

PS1: 未声明 和 声明了但没有初始化是不一样的

var message;                  //声明但未初始化
//var box;                    //未声明
alert(message);               //undefined
alert(box);                   //报错

PS2: 使用 typeof 操作符检测 未声明或者声明了没有初始化的变量都返回 undefined

var message;
//var box;
alert(typeof message);        //undefined
alert(typeof box);            //undefined

1.3.3 Null类型

null 类型也只有一个值:null,表示一个空指针对象。如果定义的变量准备将来用于保存对象,最好将该变量初始化为 null 。

实际上,undefined 值是派生自 null 值的,因此它们两个是相等的。

console.log(undefined == null);         //true

PS: 尽管 undefined 和 null 之间的相等操作符总是返回 true ,但他们的用途完全不一样。无论什么时候都没必要把一个变量的值显式的设置为 undefined,而只要意在保存对象的变量还没有真正的保存对象,就应该明确地让该变量保存 null 值。

1.3.4 Boolean类型

boolean 类型是使用最多的类型之一,有两个值:truefalse。ECMAScript 中所有类型的值都有相应的 booloen 值,转换方法是使用 Boolean() 方法,规则如下:

数据类型 转换为true 转换为false
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数值 0或NaN(Not a Number)
Object 任何对象 null
Undefined undefined
console.log(Boolean(''));       //false
console.log(Boolean(23));       //true
console.log(Boolean(null));     //false

这些转化规则对理解流控制语句自动执行相应的 Boolean 转换非常重要:

var box = 'hello';
if(box){
  alert('box is defined');
}

1.3.5 Number类型

Number 类型是最令人关注的类型。

  • 十进制: 最基本的数值字面量格式,不必多说;
  • 八进制: 第一位必须是 0,后面的数字必须是 0~7。超出范围则忽略前面的 0
  • 十六进制: 前两为必须是 0x,后面跟 0~9 a~f。超出范围报错。
    var num1 = 55;      //十进制55
    var num2 = 070;     //八进制的56
    var num3 = 079;     //无效的八进制,解析为79
    var num4 = 0xa;     //十六进制10
    var num5 = 0x1f;    //十六进制31
    

    PS: 不管几进制,经过算数运算后都被转换为十进制。

前面提到的都是整数,下面说一下包含小数点的数值。

  • 如果小数点后没有跟任何数字或跟着 0,都会被解析为整数;(保存浮点数需要的内存是整数的2倍)
  • 极大或极小的数值,使用科学记数法表示;
    var floatNum1 = 12.0;       //解析为12
    var floatNum2 = 1.;         //解析为1
    var floatNum3 = 3.125e7;    //等于31250000
    var floatNum4 = 3e-7;       //等于0.0000003
    

PS1: 浮点数的精度是 17 位小数(小数点后17位),在进行算数运算时后出现一些误差。例如:0.1 加 0.2 的值结果是 0.30000000000000004,而不是 0.3 。这个现象在很多编程语言中都存在,并非 ECMAScript 一家。解决办法就是永远不要测试某个特定的浮点数值。

console.log(0.1 + 0.2 == 0.3);      //false

数值范围: 由于内存限制,ECMAScript 并不能保存世界上所有的数值。最小值为 Number.MIN_VALUE = 5e-324;最大值为 Number.MAX_VALUE = 1.7976931348623157e+308。如果某次计算结果超出了这个范围,将自动被转换为特殊值 Infinity(无穷),并且不能参与后面的运算。

数值转换: 有3个函数可以将非数值转换为数值:Number()parseInt()parseFloat()。第一个可以转换任何数据类型,后两个专用于字符串的转换。

Number() 的转换规如下:(相对复杂并且不合理,所以不常用)

parseInt() 的转换规则:

  • 空字符串转换为 NaN;
  • 第一个非空字符位数字时,继续往后解析,知道遇到非数字字符。
  • 对特殊字符,使用第二个参数:转换时使用的进制。
    var num1 = parseInt('');          //NaN
    var num2 = parseInt('123blue');   //1234
    var num3 = parseInt('123.45');    //123
    var num4 = parseInt('0xaf', 16);  //175
    var num5 = parseInt('af');        //NaN
    

    PS: parseFloat() 与 parseInt() 相似,只不过字符串中的第一个小数点有效,并且只解析十进制。

1.3.6 String类型

字符串可以用 单引号或双引号 表示。任何字符串使用 .length 方法都可以获得其长度。

将一个值转换为字符串有两种方式:toString()方法String()函数(一般使用后者)。

  • 如果值有 toString() 方法,则调用该方法,并返回相应结果;
  • 如果值是 null ,返回 ‘null’;
  • 如果值是 undefined ,返回 ‘undefined’。

PS: 使用加号操作符也可以把某个值与另一个值加在一起,返回一个字符串。

1.3.7 Object类型

对象其实就是一组数据和功能的集合。这里只介绍三个所有对象都会有的方法,其他内容后面将详细介绍。

  • toLocaleString() 返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString() 返回对象的字符串表示
  • valueOf() 返回对象的字符串、数值或布尔值表示。

 上一篇
JavaScript JavaScript
操作符操作符用来处理数据值。包括算数操作符(加号、减号等)、位操作符、关系操作符和相等操作符。 1.4.1 一元操作符只能操作总一个值的操作符叫做一元操作符。是 ECMAScript 中最简单的操作符。 递增(++)和递减(–): 直接借
2018-09-14
下一篇 
JavaScript语句 JavaScript语句
语句从本质上看,语句定义了 ECMAScript 中的主要语法,语句通常使用几个关键字来完成给定的任务。 1.5.1 if语句if 语句几乎时所有编程语言中最常用的语句。语法如下: if (condition) statement1 els
2018-09-14
  目录