JavaScript学习-值类型

本文详细介绍了ECMAScript中的六种数据类型:Undefined、Null、Boolean、Number、String及Object,并探讨了每种类型的特性、数值转换方法及类型检测手段。

概述

ECMAScript 中有5种简单的数据类型(也称基本数据类型-值类型):
Undefined,Null,Boolean,Number,String,还有一种复杂数据类型(引用类型)—Object,Object是由一组无序的名值对组成的。

1, Undefined类型

Undefined类型只有一个值,即:undefined。
不过,包含undefined值得变量和尚未定义的变量还是不一样的。
对于尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。
对未初始化和为声明的变量执行typeof操作符都返回了undefined值。

2,Null类型

Null类型只有一个值,即:null。
null值表示一个空对象指针,这也正是使用typeof操作符检测null值时会返回“object”的原因。

3,Boolean类型

Boolean类型是ECMAScript中使用最多的一种类型,该类型只有两个字面值true和false,这两个值和数字值不是一回事。

4,Number类型

使用IEEE754格式来表示整数和浮点数值。
在进行算术计算的时候,所有的8进制和16进制表示的数值最终都将被转换成十进制数值。

  1. 整数

    1. 8进制的字面量表示
      8进制的第一位必须是0,后面是是8进制数字序列(0-7),如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数字将被当做10进制来解析

    2. 16进制的字面值表示
      前两位必须是0x

  2. 浮点型

    1. 对于极大和极小的数值,可以用e表示法表示的浮点值表示,
      例子:3.125e7 // 等于31250000 ,含义为“3.125乘以10的7次方”
      例子:3.125e-7 // 含义为“3.125乘以10的-7次方”
    2. 浮点值的最高精确度为17位小数,但在进行算术计算时其精确度远远不如整数,例如0.1+0.2的结果不是0.3,而是0.300…004。所以永远不要测试某个特定的浮点数值。
  3. 数值范围

    1. ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中,最大数值保存在Number.MAX_VALUE中如果某次计算的结果得到了一个超过JavaScript数值范围的值,那么这个数值会被自动转换成特殊的Infinity值,或为负-Infinity
  4. NaN
    即非数值,(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回上数值的操作数未返回数值的情况(这样就不会抛出错误了)。

    1. NaN本身有两个非同寻常的特点,首先,任何涉及NaN的操作都会返回NaN,其次NaN与任何值都不相等,包括NaN本身。
    2. isNaN()函数,任何不能被转换成数值的值都会导致这个函数返回true,例:isNaN(“blue”) // true (不能被转换成数值)
      对对象来说,isNaN()会首先调用对象的valueOf()方法,如果是NaN,则调用对象的toString()方法。
  5. 数值转换
    有3个函数,将非数值->数值:Number(),parseInt(),parseFloat()
    具体例子,查阅《JavaScript高级程序设计》P31列出的例子.

5,String类型

要将一个值转换为一个字符串有两个方式。

  1. toString()

    1. 第一种是使用几乎每个值,都有的toString()方法,null和undefined值没有这个方法。
    2. 在调用toString()方法时,可以传递一个参数:输出数值的基数。默认情况下,以是10进制格式返回数值的字符串表示,而通过传递参数,toString()可以输出以二进制,八进制,十六进制,乃至其他任意有效进制格式表示的字符串值,例子:

      var num = 10;
      num. toString(); // 10
      num. toString(2); // 1010
      num. toString(8); // 12
      num. toString(10); // 10
      num. toString(16); // a 
  2. String()
    在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),遵循以下规则:

    1. 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果。
    2. 如果值是null,则返回“null”
    3. 如果值是undefined,则返回“undefined”

6,类型检测

  1. typeof操作符
    鉴于ECMAScript是松散类型的,因此需要一种手段来检测给定变量的数据类型—typeof。typeof操作符的操作数可以使变量,也可以是数值字面量,注:typeof是一个操作数,不是一个函数,因此圆括号不是必需的。
    如果对一个值使用typeof操作符可能返回下列某个字符串:
    “undefined”—如果这个值未定义;
    “boolean”—如果这个值是布尔值;
    “string”—如果这个值是字符串;
    “number”—如果这个值是数值;
    “object”—如果这个值是对象或null;
    “function”—如果这个值是函数。
  2. instanceof操作符
    虽然在检测基本数据类型时typeof是非常得力的助手,但在检测引用类型的值时,typeof操作符用处不大,通常,我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。为此ECMAScript提供了instanceof操作符,语法如下
    result = variable instanceof constructor
    根据规定,所有引用类型的值都是Object的实例。因此,在检测一个引用类型值和Object构造函数时,instanceof操作符始终会返回true,检测基本数据类型时,使用返回false.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值