JavaScript数据类型包括基本数据类型和引用数据类型
基本数据类型:null,undefined,string number,boolean;
引用数据类型:对象类型;
不支持创建自定义类型,所有的变量都是这6种数据类型之一;
boolean类型
取值为true,false(均为小写);其它类型转换为boolean类型的取值为:
数据类型 | 转换为true的取值 | 转换为false的取值 |
---|---|---|
boolean | true | false |
string | 非空字符串 | 空字符串("") |
number | 非零数值 | 0和NaN |
object | 任何对象 | null |
undefined | 不存在 | undefined |
其它类型转换为boolean类型,内部使用的是Boolean();
number类型
number类型使用IEEE754格式来表示整数和浮点数,基于这种格式的浮点数计算会产生舍入误差问题。
数值取值区间[Number.MIN_VALUE ~ Number.MAX_VALUE];
可以使用boolean window.isFinity(number)检测数值是否在取值区间内;
@number取值为数值或可转化为数字的类型
@返回值boolean类型(NaN,超过取值范围的为false;其余为true)
boolean function isFinity(number){
}
如果超过范围会自动转换为正负Infinity;
number类型有一个特殊的取值NaN,它有两个特点:
一、任何设计NaN的操作都返回NaN;
二、NaN与任何值都不相等,包括NaN本身;
针对NaN以上的两个特点定义了isNaN()函数,该函数接受一个参数,内部尝试将这个参数转换为数值(window.Number()),如果不能转换则返回true;否则返回false;
其它类型转换为number类型,使用的方法是window.Number();
数据类型 | 转为number类型的取值 |
---|---|
boolean | true =1;false=0; |
string | Number("")=0;Number("23kk")=NaN; |
null | Number(null)=0; |
object | 先调用对象的valueOf ()如果返回NaN,再调用对象的toString() |
undefined | NaN |
//12
Number("012");
//NaN
Number("12k");
//NaN
Number("k12");
//0
Number("");
string类型
其它类型转换为string类型的方法有两个toString()和String();除了null和undefined,其它类型都有toString()方法;如果不知道转换的值是否是null或undefined,可以使用String();String的转换规则如下:
1、如果值有toString()方法,调用这个方法返回相应的结果;
2、如果值是null,返回“null";
3、如果值是undefined,返回”undefined";
//"null"
String(null)
//"undefined"
String(undefined);
//"123"
String(123);
//"true"
String(true);
//"[object Object]"
var o=new Object();
String(o);
//"[object Object]"
var o=new Object();
console.log(o.valueOf().toString());
//"123"
var n=new Number(123);
n.toString();
//"true"
var b=new Boolean(true);
b.toString();
类型转换
类型转换包括隐式转换和显式转换
隐式类型转换函数:Boolean();Number();String();Object();
除了基本类型之间的转换按照前面表格中的规则转换;基本类型转对象类型对应自己的隐式类型转换函数(null,undefined除外);
对象转基本数据类型,除了null和undefined外,转boolean类型也很明确(任何对象都转换成true,null转成false);
其它两种情形:
1、对象转数字:对象先尝试调用valueOf()方法,如果这个方法返回一个基本类型,则尝试把这个基本类型转换成数字并返回;如果没有valueOf()方法或者没有返回基本类型,尝试调用toString()方法,如果这个方法返回一个基本类型,则尝试把这个基本类型转换成数字并返回;
2、对象转字符串:对象先尝试调用toString()方法,如果这个方法返回一个基本类型,则尝试把这个基本类型转换成字符串并返回;如果没有toString()方法或者没有返回基本类型,尝试调用valueOf()方法,如果这个方法返回一个基本类型,则尝试把这个基本类型转换成字符串并返回;
//空数组转换成数字0
var arr=[];
arr.valueOf(); //[];不是一个基本类型
arr.toString(); //"";一个空字符串,是一个基本类型
Number(""); //0;空字符串被转换成为0