JavaScript所有数据类型解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WinstonLau/article/details/78872528

首先介绍一下 typeof

typeof 是用于检测给定变量的数据类型的,其操作对象既可以是变量也可以是数值字面量,typeof 是一个操作符而不是函数,因此例子中的圆括号尽管可以使用,但不是必需的

返回值 说明
undefined 如果这个值未定义
boolean 如果这个值是布尔值
string 如果这个值是字符串
number 如果这个值是数值
object 如果这个值是对象或 null
function 如果这个值是函数

下面举几个使用 typeof 的例子:

var message = "some string";
alert(typeof message);      //string
alert(typeof (message));    //string
alert(95);                  //number

undefined 类型

  • undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined。请看下面的两个等价的例子:
var message;
alert(message == undefined);     //true

var message = undefined;
alert(message == undefined);     //true
  • 第二个例子使用 undefined 值初始化了变量 message,但我们没有必要这么做,因为未经初始化的值默认就会取得 undefined 值

Null 类型

  • null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度看,null 值表示一个空对象指针,而这也正是 typeof 操作符检测 null 值时会返回 object 的原因,如下面的例子所示:
var car = null;
alert(typeof car);      //object
  • 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其它值

  • 实际上,undefined 值是派生自 null 值的,因此 ECMA-262 规定对它们的相等性测试要返回 true:

alert(null == undefined); //true

  • 尽管 null 和 undefined 有这样的关系,但它们的用途完全不同。无论在什么情况下,都没有必要把一个变量的值显示地设置为 undefined,可是同样的规则对 null 却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存 null 值,这样做不仅可以体现 null 作为空对象指针的惯例,而且也有助于进一步区分 null 和 undefined。

Boolean 类型

  • 该类型只有两个字面值:true 和 false。这两个值和数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。
  • 需要注意的是,Boolean 类型的字面值 true 和 false 是区分大小写的。也就是说,True 和 False(以及其它的混合打小写形式)都不是 Boolean 值,只是标识符。
  • 虽然 Boolean 类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。要将一个值转换为其对应的 Boolean 值,可以调用转型函数 Boolean(),如下所示:
var message = "hello world";
var messageAsBoolean = Boolean(message);
  • 可以对任何数据类型的值调用 Boolean() 函数,而且总会返回一个 Boolean 值,下表给出了各种数据类型及其对应的转换规则:
数据类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值,包括无穷大 0 和 NaN
Object 任何对象 null
Undefined n/a(或N/A,是 not applicable 的缩写,意思是“不适用”) undefined

Number 类型

  • 这种类型使用 IEEE754 格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)

  • 进制相关知识:

    1. 除了十进制以外,整数还可以通过八进制或十六进制的字面值来表示。

    2. 八进制字面值的第一位必须是 0,然后是八进制数字序列(0~7),如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析

      var octalNum1 = 070;      //八进制的56
      var octalNum2 = 079;      //无效的八进制数值,解析为79
      var octalNum3 = 08;       //无效的八进制数值,解析为8
      
    3. 十六进制字面值的前两位必须是 0x(零和小写的 x),后跟任何十六进制数字(0~9 及 A~F)。其中,字母可以大写也可以小写

      var hexNum1 = 0xA;      //十六进制的10
      var hexNum2 = 0x1f;     //十六进制的31
      
  • 浮点数值: 即该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

    1. 虽然小数点前面可以没有整数,但这种写法并不推荐

      var floatNum1 = 1.1;
      var floatNum2 = 0.1;
      var floatNum3 = .1;      //有效,但不推荐
      
    2. 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。例如,0.1 加 0.2 的结果不是 0.3,而是 0.30000000000000004(15 个 0)。这个小小的舍入误差会导致无法测试特定的浮点数值:

      <script>
      	var a = 0.1;
      	var b = 0.2;
      	if(a + b == 0.3) {
      		alert("success");
      	}else {
      		alert("not");   //弹出这个
      	}
      </script>
      
  • NaN: 即 Not a Number,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,这样就不会抛出错误了。例如,在 ECMAScript 中,任何数值除以非数值都会返回 NaN,而不是像在其它编程语言中一样会导致错误,从而停止代码运行。

    1. NaN 的两个特点:任何涉及 NaN 的操作都会返回 NaN;NaN 与任何值都不相等,包括 NaN 本身

    2. isNaN() 函数:该函数接受一个参数,参数可以是任何类型。函数会帮我们确定这个参数是否 “不是数值”,并且在接收参数之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,请看下面的例子:

      alert(isNaN(NaN));            //true
      alert(isNaN(10));             //false(10 是一个数值)
      alert(isNaN("10"));           //false(可以被转换为数值 10)
      alert(isNaN("blue"));         //true(不能转换为数值)
      alert(isNaN(true));           //false(可以被转换成数值 1)
      

String 类型

  • String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号或单引号表示,因此下面两种写法都是有效的:

    var firstName = "Nicholas";
    var lastName = 'Zakas':
    
  • ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

Object 类型

  • ECMAScript 中的对象其实就是一组数据和功能的集合,对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。创建 Object 类的实例的方法如下:

    var o = new Object();
    

    这个语法与 Java 中创建对象的语法相似;但在 ECMAScript 中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号,即:

    var o = new Object;      //有效,但不推荐这样做
    

猜你喜欢

转载自blog.csdn.net/WinstonLau/article/details/78872528