黑铁时代
Programing is not only one kind of technology, but also one kind of art.

JavaScript是一种动态语言,数据类型一共只有6种,它们是:Number,String,Boolean,Object,Undefined,Function。

如果你用typeof去判断这几种类型的变量,你会得到相应的字符串结果:number,string,boolean,object,function, undefined。

 

1. Undefined 类型

  如果你只是用var声明一个变量,并未赋值,那么这个变量的值就是undefined。

 

  var a;

  alert( a === undefined ); // true

  alert( b ); // 导致错误,因为没有声明

  alert(typeof b)// undefined

 

  建议养成初始化变量的习惯,这样就可以减小开发中的错误,遇到undefined的变量,我们就一定认为还没有声明。

 

2. Number 类型

  JS中没有int或者float这样的类型,唯一可以表示数字的就是Number类型,它可以表达不仅十进制,还有八进制和十六进制。

  var intNum = 1; // 十进制整数

  var floatNum  = 1.1 或者 .1(不建议这样写)  // 十进制小数

  var octNum = 070 // 八进制数

  var hexNum = 0xff // 十六进制数

  var eNum = 123e5 // 科学计数法,等于123*10的5次指数幂

  

   Number类型嫩各表示的最大数值是由Number.MAX_VALUE(1.7976931348623157e+308),最小数值是Number.MIN_VALUE(5e-324)。如果你的计算结果超出了JS能表示的最大值和最小值,那么将得到Number.NEGATIVE_INFINITY(-Infinity)和Number.POSITIVE_INFINITY(Infinity),即负无穷大和正无穷大。如果去判断计算结果是否超出范围呢,我们可以用JS自带的函数isFinite()去判断,如果超出了数值范围,将返回ture。

 

  NaN的意思是Not a Number。如果在计算时候返回了非数字的结果,不会抛出异常而是返回NaN。

  比如用Number('0.1a')就会返回NaN,除0异常也会返回NaN。

  NaN不会等于任何值,包括它自己,如果你用alert(NaN == NaN)会得到false。所以我们通常只能用isNaN()去判断是否得到了NaN的结果,isNaN(NaN)得到ture,isNaN(1)得到false。

 

  关于数字的转换,JS提供了三个函数Number(),pareseInt()和parseFloat()。

  Number的转换规则如下:

    true和false -> 1和0

    数值 -> 数值

    null -> 0

    undefined -> NaN

    数字字符串 -> 相应的数值(011会转换成11,空字符串会转换成0,如果含有非数字的字符转换成NaN)

    对象 -> 先调用其valueOf方法,如果返回值不能按照上诉规则进行转换,即转换结果为NaN,那么在调用toString方法进行转换

      例:var o = Object();

        o.valueOf = function() {

          return 5;

        }

        Number(o); // 得到5

  parseInt的转换规则如下:

    "11abc" -> 11 // 从第一个字符开始解析,直到遇到非数字字符

    "1.1ab" -> 1 // 解析到小数点停止

    "0xFF" -> 255 // 将十六进制转换成十进制

    "010" -> 8 // 八进制也会同样被转换成十进制

    "10" -> 10 // 前面没有0,直接解析成十进制

  parseInt还有第二个参数,用来告诉函数以什么样的基数来解析。parseInt(10, 8)会将10以八进制来解析,于是就得到了8。同样我们还可以指定第二个参数为10或者16,道理一样。如果你非要用5做基数,那么将得到5进制的数字,只要你觉得对你来说有意义的话。为了保证结果的准确性,建议使用第二个参数。

  parseFloat和parseInt类型,但是也有不同的地方:

    parseFloat没有第二个参数,它只以十进制为基数来解析;

    pareseFloat会认为第一个小数点有效,后面的就无效了;

    对于十六进制的数字,始终返回0

    会忽略前面的所有0,八进制数字也是如此(077转换成77)

 

3 Boolean 类型

  布尔类型只有两个值true和false,区分大小写。

 

  var found = true;或者

  var found = false;

 

  对于其他类型的值,也可以转化成布尔类型,显示的转化方式:var found = Boolean( otherTypeValue );

  具体的转换规则如下:

  String 类型:空字符串转化成false,其他字符串转化成true

  Number 类型:非零数字值转换成true,0转换成false,NaN也会转换成fasle

  Undefined 类型:总是转成成false

  Object 类型:任何对象都会转换成true,null对象会转换成false

 

4 String 类型

  字符串就是用双引号或者单引号表示的一串字符序列。不论你使用哪种引号,但是必须配对。

  字符串有一个length属性,可以取出字符串中的字符个数。

 

  字符串的转换有两种方式toString()和String(),大多数数据类型都具有toString()方法,可以返回类型转化后的字符串的副本,toString还可以传入一个参数作为数字类型转换时候的基数,比如2,8,10会分别以二进制,八进制,十进制的方式进行转换。

    var n = 10;

    n.toString(2); // 得到1010

  String()的功能类似:

    String(n); // 得到10

  如果传给String()的参数是null或者undefined,那么将得到'null'和'undefined'的字符串结果。

 

5 Null 类型

  Null类型唯一的值就是null,前面提到如果声明变量但是不进行初始化,那么这个变量就会是undefined。对于null,我们通常的做法是将null赋值给那些将来会用来引用对象的变量。如果一个变量是null,那么我们就认为这个变量还没有引用任何对象。这只是一个建议的编程习惯,而不是语法规定。

  我们用typeof null会得到'object',而typeof undefined会得到'undefined',所以他们的类型是不一样的。但是如果用null == undefined可以得到true,null === undefined会得到false。

 

6 Object 类型

  Object对象是所有对象的基础,具有最基本的属性和方法,是最轻量级的对象。

  我们通常用new操作符创建一个新的对象:

    var o = new Object();

  不想要带任何参数,此时o就具备最基本的对象的特征了:

    valueOf() 返回对象的表示。

    toString() 返回对象的字符串表示,'[object Object]'

    constructor 对构造函数的引用,如Object()

    hasOwnProperty(propertyName) 判断属性是否属于自身实例,而不是从原型继承的

  

  

posted on 2012-05-29 22:57  黑铁时代  阅读(247)  评论(0编辑  收藏  举报