javascript数据类型

数据类型

ECMAScript中有5种基本数据类型:Undefined、Null、Boolean、Number和String。还有1种复杂数据类型:Object。

注意:和其它语言不同,String是基本数据类型,不是引用数据类型。

typeof操作符

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

  • “undefined”————如果这个值未定义;
  • “boolean”————如果这个值是布尔值;
  • “string”————如果这个值是字符串;
  • “number”————如果这个值是数值;
  • “object”————如果这个值是对象或null;
  • “function”————如果这个值是函数。
  var message = "some string";
  alert(typeof message);     // "string"
  alert(typeof(message));    // "string"
  alert(typeof 95);          // "number"

typeof是一个操作符而不是函数,因此例子中的圆括号虽然可以用,但不是必需的。

Undefined类型

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

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

不过尚未初始化的变量与尚未定义的变量是不一样的。

  var message;
  alert(message);   // "undefined"
  alert(age);       // error

对未初始化的变量和未定义的变量执行typeof操作符都会返回undefined。

  var message;
  alert(typeof message); // "undefined"
  alert(typeof age);     // "undefined"

即便未初始化的变量会自动被赋予undefined值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回”undefined”时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。

Null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示空对象指针,而这也正是使用typeof null时返回”object”的原因。

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

如果定义的变量是用来保存对象的,那么最好将该变量初始化为null。 这样,只要直接检查null值就可以知道比阿尼浪是否已经保存了一个对象的引用。

  if(car != null){
    // 业务逻辑
  }

只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。

Boolean类型

Boolean类型只有两个值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。可以对任何数据类型的值调用Boolean(),而且总会返回一个Boolean值。

下表给出了各种数据类型及其对应的转换规则:

数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数值(包括无穷大)0和NaN
Object任何对象null
Undefinedn/aundefined

这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换。

  var message = "Hello world!";
  if(message){
    alert("Value is true");   // Value is true
  }

Number类型

十进制

  var intNum = 55;      // 整数

八进制


  var octalNum1 = 070;  // 八进制的56
  var octalNum2 = 079;  // 解析为79
  var octalNum3 = 08;   // 解析为8

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

  var hexNum1 = 0xA;    // 十六进制的10
  var hexNum2 = 0x1f;   // 十六进制的31

十六进制字面值的前两位必须是0x,后跟0 ~ 9 及 A ~ F。

浮点数

  var floatNum1 = 1.1;
  var floatNum2 = 0.1;
  var floatNum3 = .1;     // 不推荐

科学计数法

  var floatNum1 = 3.125e7;     // 等于31250000
  var floatNum2 = 3e-7;        // 等于0.0000003

浮点数计算时的精确度有误差

  var a = 0.1, b = 0.2;
  if(a + b == 0.3){   // 0.1 + 0.2 = 0.30000000000000004
    alert("You got 0.3.");
  }            

NaN

NaN,即非数值(Not a Number)是一个特殊的数值,这个数值表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。在ECMAScript中,任何数值除以0会返回NaN,因此不会影响其他代码的执行。

isNaN(),参数可以是任何类型,返回指定参数是否“不是数值”。

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

任何不能被转换为数值的值都会导致这个函数返回true。

数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。

最常用的是parseInt()
* 它会忽略字符串前面的空格,直到找到第一个非空格字符;
* 如果第一个字符不是数字字符或者符号,parseInt()就会返回NaN;
* 如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

  var num1 = parseInt("1234blue");      // 1234
  var num2 = parseInt("");              // NaN
  var num3 = parseInt("0xA");           // 10(十六进制数)
  var num4 = parseInt(22.5);            // 22
  var num5 = parseInt("070");           // 56(八进制数)
  var num6 = parseInt("70");            // 70(十进制数)
  var num7 = parseInt("0xF");           // 15(十六进制数)

parseInt()的第二个参数为转换时的进制。

  var num1 = parseInt("0xAF", 16);      // 175

parseFloat()

  var num1 = parseFloat("1234blue");      // 1234
  var num2 = parseFloat("0xA");           // 0
  var num3 = parseFloat("22.5");          // 22.5
  var num4 = parseFloat("22.34.5");       // 22.34
  var num5 = parseFloat("0908.5");        // 908.5
  var num6 = parseFloat("3.125e7");       // 31250000

parseFloat()只解析十进制值,其它进制的字符串会被转换成0。

String类型

字符串转换

.toString()

number、boolean、object和string都有toString()。但null和undefined值没有这个方法。
调用Number的toString()时,可以传一个参数:输出数值的进制。默认情况下.toString()以十进制格式返回数值的字符串表示。

  var num = 10;
  alert(num.toString());           // "10"
  alert(num.toString(2));          // "1010"
  alert(num.toString(8));          // "12"
  alert(num.toString(10));         // "10"
  alert(num.toString(16));         // "a"

String()

在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),这个函数可以将任何类型的值转换为字符串。
String()遵循以下转换规则:
* 如果值有toString(),则调用toString(),并返回相应的结果;
* 如果值是null,则返回”null”;
* 如果值是undefined,则返回”undefined”。

  var value1 = 10;
  var value2 = true;
  var value3 = null;
  var value4 = 10;
  alert(String(value1));          // "10"
  alert(String(value2));          // "true"
  alert(String(value3));          // "null"
  alert(String(value4));          // "undefined"

Object类型

属性和方法:
* constructor: 保存着用于创建当前对象的函数。
* hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。propertyName必须以字符串形式指定。
* isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
* propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。propertyName以字符串形式指定。
* toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
* toString():返回对象的字符串表示。
* valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()的返回值相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值