首页 > 代码库 > JavaScript 知识点之数据类型
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); // false2 alert(0.1 + 0.2 === 0.30000000000000004); // true
Infinity和-Infinity
即正无穷和负无穷
1 alert(1 / 0); // Infinity2 alert(-1 / 0); // -Infinity
NaN
NaN,即非数值(Not a Number)。 它表示的不是一个数字,尽管typeof NaN === ‘number‘; 返回的是true. 它是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
可以通过Number.NaN 得到NaN 值,任何与NaN 进行运算的结果均为NaN. NaN不等于任何值,包括它自己。
1 alert(Number.NaN); //NaN2 alert(NaN + 1); //NaN3 alert(NaN === NaN) //false4 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 =http://www.mamicode.com/== ‘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,如果第一个不是数值,就返回NaN4 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, 会在以后的文章中详细介绍。
未完待续......
JavaScript 知识点之数据类型