《高级程序设计》3.4 数据类型

javascript有5种简单数据类型(也称基本数据类型)UndefinedNullBooleanNumberString。还有一种复杂数据类型——Object

typeof操作符可以检测给定变量的数据类型:

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

1)Undefined类型

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

对于尚未声明的变量,只能执行一项操作,即typeof检测其数据类型。

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

var message;
alert(message==undefined); //true
alert(age);    //会报错!!!
alert(typeof  message);  //undefined
alert(typeof age);  //undefined

2)Null类型

Null类型也是只有一个值,即null。表示一个空对象指针,所以typeof一个为null值的变量返回的是“object”

alert(null==undefined); //true

如 果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确 地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。

3)Boolean类型

Boolean类型只有两个字面值:true和false。如果要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Objec 任何对象 bull
Undefined 不适用 undefined

 

 

 

 

 

 

4)Number类型

①浮点数值

对于极大或极小的数值,可以用e表示法(即科学计算法)。

浮点数值计算会产生舍入误差问题:浮点数值的最高精度是17位,但在进行算术计算时,其精确度远远不如整数。例如:0.1+0.2的结果不是0.3,而是0.30000000000000004。

so,永远不要测试某个特定的浮点数值

var a=0.1,b=0.2,c=0.15,d=0.15;
alert(a+b);  //0.30000000000000004
alert(c+d); //0.3

②数值范围

javascript能够表示的最小数值保存在Number.MIN_VALUE中,这个值是5e-324;

最大数值保存在Number.MAX_VALUE中,这个值是1.7976931348623157e+308;

在javascript计算中如果得到一个超出javascript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值,即如果这个数值是负数,则被转换为-Infinity(负无穷),如果为正数,则是Infinity(正无穷)

③NaN

即非数值(Not a Number)是一个特殊的数值,这个数值用于表示本来要返回数值的操作数未返回数值的情况。例如:在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在javascript中返回NaN,因此不会影响其他代码的执行。

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

isNaN()函数,确定这个参数是否“不是数值”

    alert(isNaN(NaN));     //true;
    alert(isNaN(10));      //false
    alert(isNaN("10"));    //false
    alert(isNaN("blue"));  //true
    alert(isNaN(true));    //false

④数值转换

有3个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat();

Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。

Number()函数的转换规则:

  • 如果是Boolean值,true和false将分别被转换为1和0;
  • 如果是数字值,只是简单的传入和返回;
  • 如果是null值,返回0;
  • 如果是undefined值,返回NaN;
  • 如果是字符串,遵循下列规则:
    1. 如果字符串中只包含数字(包括前面带加号或逗号),将其转换为十进制。即“123”转换为123。“011”转换为11(忽略前导0);
    2. 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
    3. 如果字符串中包含有效的十六进制,则将其转换为十六进制;
    4. 如果字符串是空的,不包含任何字符,则将其转换为0;
    5. 如果字符串中包含除上述以外的字符,则将其转换为NaN;
  • 如果是对象,则调用valueof()方法,然后依照前面的规则转换返回值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
var num1=Number("Hello world!");  //NaN
var num2=Number("");              //0
var num3=Number("000011");        //11
var num4=Number(true);            //1
var num5=Number("1234value");     //NaN
var num6=Number("1.34a");         //NaN
//    对比
var num7=parseInt("1234value");  //1234
var num8=parseInt("1.34a");      //1

在处理整数的时候,更常用的是parseInt()函数。

parseInt()函数转换规则:

  • 如果第一个字符不是数字或者负号,返回NaN。
  • 如果第一个字符是数字,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如“1234blue”会被转换为1234;
  • 如果字符串中的第一个字符是数字字符,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");  //70  注意,javascript5引擎已经不具备解析八进制的能力,因此前导的0会被认为无效。
var num6 = parseInt("70");  //70
var num7 = parseInt("0xf");  //15
//    so 针对整数格式的转换的困惑,可以为这个函数提供第二个参数,即:
var num55=parseInt("070",8);  //56
var num66=parseInt("70",10);  //70
var num77=parseInt("0xf",16); //15
// so 多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。

与parseInt()类似,parseFloat()也是从第一个字符开始解析,直到遇见一个无效的浮点数字字符为止。也就是说字符串中的第一个小数点是有效的,而第二个小数点就是无效了。

其次,parseFloat()只解析十进制值,因此十六进制会被解析为0;

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"); //0908.5
var num6=parseFloat("3.125e7"); //31250000

5)String类型

字符串可以用双引号(“)或者单引号(‘)表示;

String数据类型包含一些特殊的字符字面量,也叫转义序列

字面量 含义
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号(’),在用单引号表示字符串时使用。例如:‘He said,\'hey.\'’
\" 双引号(”),在用双引号表示字符串时使用,例如:"He said,\"hey.\""
\xnn 以十六进制代码nn表示的一个字符串(其中n为0~F)。例如,\x41表示“A”
\unnn 以十六进制代码nnnn表示的一个Unicode字符串(其中n为0~F)。例如,\u03a3表示希腊字符Σ

 

 

 

 

 

 

 

 

 

 

 

toString()方法

注意这个是方法跟parseInt()是函数的区别。

  • 数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有这个方法。
  • 多数情况下,不必传递参数。但也可以指定基数,改变输出的值。
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()方法,则调用该方法(没有参数)
  • 如果值是null,则返回“null”
  • 如果值是undefined,则返回“undefined”。
var value1=10;  
var value2=true; 
var value3=null; 
var value4;  
alert(String(value1)); //"10"
alert(String(value2)); //"true"
alert(String(value3)); //"null"
alert(String(value4)); //"undefined"

6)Object对象类型

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

var o=new Object();

详见。。。。。。

posted @ 2015-02-06 16:04  psycho_z  阅读(318)  评论(0编辑  收藏  举报