JavaScript 知识点之数据类型

因为网上相关的教程很多,接触过其它编程语言的朋友们应该很容易上手,我在此就不多写了。接下来我只写一些我认为在学习过程中容易出问题的地方。

一、数据类型划分

  • Number
  • String
  • Boolean
  • Object
    • Function
    • Array
    • Date
    • RegExp
  • Null
  • Undefined

可以使用typeof查看变量的类型,typeof运算符产生的值有number, string, boolean, undefined, function, object. 但是请注意,如果运算数是一个数组或null, 那么结果是object.

二、Number

在JavaScript中,浮点与整数间没有区别。事实上,JavaScript中的每个数字都表示使用双精度64位格式IEEE 754。简单理解,所有数字都是浮点。在处理浮点数的时候一定要小心,比如:

1 alert(0.1 + 0.2 === 0.3); // false
2 alert(0.1 + 0.2 === 0.30000000000000004); // true

Infinity和-Infinity

即正无穷和负无穷

1 alert(1 / 0); // Infinity
2 alert(-1 / 0); // -Infinity

NaN

NaN,即非数值(Not a Number)。 它表示的不是一个数字,尽管typeof NaN === 'number'; 返回的是true. 它是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

可以通过Number.NaN 得到NaN 值,任何与NaN 进行运算的结果均为NaN. NaN不等于任何值,包括它自己。

1 alert(Number.NaN); //NaN
2 alert(NaN + 1); //NaN
3 alert(NaN === NaN) //false
4 alert(NaN !=== NaN) //true

可以用isNaN来判断这个值到底是不是NaN。isNaN()函数在接收到一个值之后,会尝试将这个值转换为数值。

1 alert(isNaN(25)); //false,25 是一个数值
2 alert(isNaN('25')); //false,'25'是一个字符串数值,可以转成数值
3 alert(isNaN('hi')); //true,'hi'不能转换为数值

如果我们要检测一个变量是真的是数字而不是NaN, Infinity,或者通过字符串转换过来的,我们可以借助isFinite函数。isFinite可以去掉NaN, Infinity,但会尝试将这个值转换为数值。所以我们可以这样写:

1 var isNumber = function isNumber(value)
2 {
3     return typeof value === 'number' && isFinite(value);
4 }
5 
6 alert(isNumber('10')); // false

parseInt

parseInt可以把字符串转换为整数。它遇到非数字时会停止解析。

1 alert(parseInt('12.34')); //12,去掉小数点后面的
2 alert(parseInt('12.34abc56')); //12,去掉小数点后面的,遇到非数字时会停止解析
3 alert(parseInt('abc12.34')); //NaN,如果第一个不是数值,就返回NaN
4 alert(parseInt('')); //NaN,空返回NaN

parseInt除了能够识别十进制数值,也可以识别八进制(我实验后发现只是对低版本浏览器有效,FF,Chrome会将前导0去掉)和十六进制。

1 alert(parseInt('070')); //56=>八进制(IE6);70=>FF,Chrome会将前导0去掉
2 alert(parseInt('080')); //0=>(IE6)八进制中8,9是无效的,按0处理; 80=>FF,Chrome会将前导0去掉
3 alert(parseInt('0xA')); //10,十六进制
4 alert(parseInt('0xAyz')); //10,十六进制,yz 被自动过滤掉

同时parseInt还提供了第二个参数,用于解决各种进制的转换。这也是推荐的写法,以免发生像上面例子中不同浏览器有不同处理的问题。

1 alert(parseInt('101010', 2)); // 42, 二进制
2 alert(parseInt('0xAF')); //175,十六进制
3 alert(parseInt('AF',16)); //175,第二参数指定十六进制,可以去掉0x 前导
4 alert(parseInt('070', 8)); //56, 八进制

parseFloat

parseFloat是用于浮点数值转换的,从第一位解析到非浮点数值位置。但它是不认十六进制的。

1 alert(parseFloat('0xA')); //0,不认十六进制
2 alert(parseFloat('1.234e7')); //12340000,可以把科学技术法转成普通数值

三、String

String类型用于表示由于零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示。字符串的很多方法都会和正则表达式一起使用,等介绍正则表达式的时候再详细说明,这里就先不多写了,只先说两点:

提取字符串中的一个字符

1 var name = 'Wendy';
2 alert(name.charAt(1)); //e

如果写成name[1]在IE6下会显示undefined,所以使用时要慎重。

提取字符串的某个部分

推荐使用slice, 因为substring不能处理负数参数。详细用法请看w3c之slice

四、Boolean

Boolean 类型有两个值:true 和false.
任何值都可以转为Boolean,遵循着以下原则:
1. false, 0, 空串(""), NaN, null, undefined均转为false
2. 其余值转为true

五、undefined和null

undefined是声明了变量但未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象。如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null.

关于object, 会在以后的文章中详细介绍。

未完待续......

posted @ 2014-10-02 17:09  WendyCoding  阅读(599)  评论(0编辑  收藏  举报