《JavaScript高级程序设计》——JS基本概念之数据类型

ECMAScript 中有五种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number 和 String。还有一种复杂数据模型:Object。

数据类型

1 typeof 操作符

typeof 用来检测给定变量的数据类型。对一个值使用 typeof 操作符可能返回下列某个字符串:

  • “undefined”——如果这个值未定义;
  • “boolean”——如果这个值是布尔值;
  • “string”——如果这个值是字符串;
  • “number”——如果这个值是数值;
  • “object”——如果这个值是对象或者null;
  • “function”——如果这个值是函数;

2 Undefined 类型

Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其初始化时,这个变量的值就是 undefined。

  • 字面值 undefined 主要目的是用于比较。
  • 对未初始化的变量和未声明的变量执行 typeof 操作符都会返回 undefined 值。
  • 建议显式的初始化变量,这样当 typeof 操作符返回 undefined 值时,我们可以知道被检测变量还未被声明,而不是尚未初始化。

3 Null 类型

Null 类型同样只有一个值——特殊的值 null。从逻辑角度看,null 值表示一个空对象指针,因此使用 typeof 操作符检测 null 值时会返回 object。

  • 如果定义的变量准备将来用于保存对象,那么最好将该变量初始化为 null。
  • undefined 值是派生自 null 值的,因此ECMA-262 规定对他们的相等性测试要返回 true:
    alert(null == undefined);		//true
    

4 Boolean 类型

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

  • 与数字值不是一回事,true 不一定等于 1,false 也不一定等于 0。
  • 区分大小写,True 和 False 都不是 Boolean 值,只是标识符。
  • 要将一个值转换为对应的 Boolean 值,可以调用转型函数 Boolean( )。对于各种类型的规则如下:
    数据类型 转换为 true 的值 转换为 false 的值
    Boolean true false
    String 任何非空字符串 “”(空字符串)
    Number 任何非零数字值(包括无穷) 0 和 NaN
    Object 任何对象 null
    Undefined 不适用 undefined

5 Number 类型

Number 类型使用 IEEE754 格式来表示整数和浮点数值。

  • 八进制子面值第一位必须为 0 ,然后是八进制数字序列(0~7),如果字面值中数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析。
    var octalNum1 = 070;		// 八进制的 56
    var octalNum2 = 079;		// 无效的八进制数值——解析为 79
    var octalNum1 = 08;		// 无效的八进制数值——解析为 8
    
  • 十六进制字面值前两位必须为 0x ,后跟任何十六进制数字。

5.1 浮点数值

  • 当浮点数中小数点后没有数字时,ECMAScript 会自动将浮点数转换为整数。
  • 对于极大极小值可以用 e 表示法(科学计数法),例如:
    var floatNum = 3.125e7;		// 等于 31250000
    
  • 永远不要测试某个特定的浮点数值,所有基于 IEEE754 数值的浮点计算都会出现这种问题。例如:
    alert(0.1+0.2==0.3)		// false
    

5.2 数值范围

  • 如果某次计算的结果得到一个超出 JavaScript 数值范围的值,那么这个值会被自动转换为特殊的 Infinity 值,负数会转换为 -Infinity。
  • 判断一个数值是不是有穷的可以通过 isFinite( )函数,有穷会返回 true。

5.3 NaN

NaN,即非数值(Not a Number)是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。

  • 任何涉及 NaN 的操作都会返回 NaN
  • NaN 与任何值都不相等,包括 NaN 本身。
    alert(NaN == NaN);		// false
    

5.4 数值转换

有 3 个函数可以把非数值转换为数值:Number( )、parseInt( )、parseFloat( )。第一个可用于任何数据类型,后两个针对字符串转换成数值。
Number( )函数转换规则:

  • Boolean值,true 和 false 分别转换为 1 和 0。
  • 数字值,简单的传入和返回。
  • null 值,返回 0 。
  • undefined 值,返回 NaN。
  • 字符串:
    • 只包含数字,转换为十进制数字,即"123"变为 123,"011"变为 11。
    • 包含有效浮点格式,转换为对应浮点值。
    • 包含有效十六进制格式,转换为对应的十进制整数值。
    • 空串转换为 0。
    • 除此之外转换为 NaN。
  • 如果是对象,调用对象的 valueOf( )方法,再依照前面规则转换。

parseInt( )函数转换规则

  • 忽略字符串前面的空格,找到第一个非空格字符,如果不是数字或负号,返回 NaN。如果第一个字符是数字字符,会继续向后解析,直到没有后续字符或者遇到非数字字符停止。例如:
    var num1 = parseInt("1234blue");		// 1234
    var num2 = parseInt("");				// NaN
    var num3 = parseInt("0xA");				// 10(十六进制)
    var num4 = parseInt(22.5);				// 22
    
  • 这个函数提供第二个参数:转换时使用的基数(即多少进制)
    var num1 = parseInt("0xAF", 16);			// 175
    var num2 = parseInt("AF", 16);				// 175
    

parseFloat( )函数与parseInt( )规则类似,但是只能解析十进制。

6 String 类型

String 类型可以由双引号和单引号表示,两者没有任何区别。

  • 转义序列:
    字面量 含义
    \n 换行
    \t 制表
    \b 退格
    \r 回车
    \f 进纸
    \\ 斜杠
    \’ 单引号
    \" 双引号
    \xnn 用十六进制代码 nn 表示一个字符
    \unnnn 用十六进制代码 nnnn 表示一个 Unicode 字符
  • 任何一个字符串都可以通过 length 属性获得长度
  • 如果字符串中包含双字节符,那么 length 属性可能会不准确
  • ECMAScript 中的字符串是不可变的,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

转换字符串

  • toString( ):除 null 和 undefined 值外都具有toString( )方法。
  • 当数值调用此方法时,可以传递参数(输出数值的基数)指定进制:
    var num = 10;
    alert(num.toString());			// "10"
    alert(num.toString(2));			// "1010"
    alert(num.toString(8));			// "12"
    alert(num.toString(16));		// "a"
    
  • String( ):可以将任何类型的值转换为字符串。
    • 有 toString( )方法,调用 toString( )方法;
    • null 返回"null";
    • undefined 返回"undefined"。

7 Object 类型

ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。

var o = new Object();
var o = new Object;			// 有效,但不推荐

Object 的每个实例都具有下列属性和方法

  • constructor: 保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName): 用于检查给定的属性在当前对象实例中是否存在。
  • isPrototypeOf(Object): 用于检查传入的对象是否是当前对象的原型。
  • propertyIsEnumerable(propertyName): 用于检查给定的属性能否用 for-in 语句来枚举。
  • toLocaleString(): 返回对象的字符串表示,该字符串与执行环境的地区对应。
  • toString(): 返回对象的字符串表示。
  • valueOf(): 返回对象的字符串、数值或布尔值表示。

猜你喜欢

转载自blog.csdn.net/TalonZhang/article/details/82826526