.JS有7种数据类型:数字(Number),字符串(string),布尔值(boolean),null, undefined, 对象(Object),Symbol(这是在ES6中提出的)
一.数字(Number)
1.在JS内部所有的数字都是以64位的浮点数形式储存的。
由于浮点数不是精确值,所以在比较的时候要非常小心。
0.1 + 0.2 === 0.3 //false
0.3/.01 //2.999999999999996
2数字的精确度。
JS的浮点数的64个二进制位,从最左边开始,是这样组成的。
.第1位:符号位,0表示正数,1表示负数。
.第2位到12位(共11位):指数部分。
.13~64位(共52位):(即有效数字小数部分1)
JS精度最多只能到53个二进制位,绝对值小于2^53的整数都可以精确保存。
3.数值范围
.JS能表示的数值范围在21024到2-1023之间,且为开区间。
.若一个数大于2^1024则会发生“正向溢出”,这时返回Infinity.
.若一个数小于2^-1023则会发生“负向溢出”,这时会返回0.
JS提供Number对象的MAX_VALUE和MIN_VALUE,返回值表示的是具体的最大值和最小值。
MAX_VALUE:1.7976931348623157e+308
MIN_VALUE:5e-324.
4.数值的表示方法
.JS可以用字面形式直接表示,比如(12)十进制,(0xFF)十六进制,还可以用科学计数法表示。
.以下两种情况JS会自动将数值转化为科学计数法表示,其他其他情况都直接采用直面的形式直接表示。
(1)小数点前的数字多余21位。
(2)小数点后紧跟5个以上的0。
5.特殊的数值
(1) +0和-0的区别就是64位浮点数表示法的第一位数字符号位的不同,几乎所有的 场合+0和-0都被当作0处理,唯一的区别场合是在+0和-0作为分母的时候,返回值不同。+0作分母返回值为Infinity,-0作分母返回值为-Infinity.。
(2).NaN表示(not a number),主要出现在将字符串转换成数字出错的时候。
.NaN不是独立的数据类型,它还是属于Number,而是一个特殊的数值。
.NaN不等于任何值,包括它本身。
NaN === NaN // false
.NaN在布尔运算时的返回值是false。
Boolean(NaN) //false
.NaN和任何数(包括其本身)进行运算,得到的返回值都是false
6.Infinity
(1)含义"无穷"用于两种场合,一是正数值太大,或者负数值太小无法表示,二是一个非0的数值除以0得到Infinity.
Infinity > 一切数;-Infinity < 一切数。(都不包括NaN)
(2)运算规则。
.Infinity的四则运算,符合无穷的数学计算规则。
5 * Inifinity //Infinity
5 - Infinity //-Infinity
Infinity / 5 //Infinity
5 /Infinity // 0
.0乘以Infinity,返回NaN; 0除以Infinity,返回0;Infinity除以0 ,返回Infinity。
.Infinity +(*)Infinity 返回Infinity; Infinity -(/) Infinity 返回NaN。
.Infinity和null的就算就相当于和0的计算。
.Infinity和undefined的计算都返回NaN。
7.与数值相关的全局方法
(1)parseInt()方法用于将字符串转换为数字。
.如果字符串前面有空格,空格会被自动删除。
.如果parseInt()的参数不是字符串,将会先被转换成字符串,在进行转换。
.字符串转换时,是一个一个字符转换的,如果遇到不能转换的,将停止转换,把已经转换好的返回出去。
.如果字符串的第一个字符不能转换为数字(后面跟着数字的加减号除外),将返回NaN。
.parseInt()的返回见过只有十进制整数,或者NaN。
.对于会自动转换为科学计数法的数字,parseInt()会出错。
parseInt('12.3') //12
parsesInt('a2') //NaN
parseInt('+3') // 3
parseInt('4a') //4
parseInt('0.0000008')//8 因为0.0000008会自动以8e-7的科学计数法的形式保存成字符串。
parseInt()可以传入两个参数,第二个参数为2~36之间的整数,表示被解析的数的进制,返回该值对应的十进制数,若不写,则默认为十进制数,若果传入的第二个人参数超过了范围,将会无意义,返回NaN,若第二参数传入的为0,null ,UNdefined的话,会被直接忽略,默认为十进制数。
(2)parseFloat()用于将字符串转换为浮点数。
parseFloat('1.23') // 1
parseFloat('1.23acb') //1
parseFloat('') //NaN
parseFloat('fa8')//NaN
.parseFloat()会自动字符串前导的空格。
.parseFloat()如果参数不是字符串,或者第一个参数不能转换为浮点数,都会返回NaN。
.注意parseFloat会将空字符串返回NaN。
8.isNaN():可以判断一个值是否为NaN
isNaN(abc) //true
isNaN(123) //false
.只针对数字有效,若传入其他值,会被转换成数字,如果无法转换成数字,字符串就会被转换成NaN,所以最后会返回true,故当isNaN返回true时可能不是NaN,是字符串。
.同样原因,对于数组和对象,isNaN也返回true。但是对于空数组和只有一个数值的数组,isNaN会返回false。
isNaN([])//flase
isNaN([123])//flase
.判断NaN最好的方法是利用NaN不等于自身的特性
function myIsNaN(value){return value} !== value;}
.isFinite()方法返回一个boolean值,表示某个值是否为正常值。
isFinite(123)//true
isFinite(NaN)//false
isFinite(null)//true
isFinite(undefined)//false
isFinite()除了NaN,undefined,Infinity,-Infinity这四个值返回false之外,都返回true。