数据类型,类型转换

ECMAScript中有:
5种简单数据类型:Undefined、Null、Boolean、Number和String
1种复杂数据类型:Object


typeof操作符
结果为6种字符串:undefined、boolean、string、number、object、function 前面5个是数
据类型
例如:
typeof({}) 返回的是object
typeof(null) 返回的是object
typeof(function(){})返回的是object

var box;
alert(typeof box); //box是Undefined类型,值是undefined,类型返回的字符串是undefined

var box=true;
alert(typeof box); //box是Boolean类型,值是true,类型返回的字符串是boolean

var box='abc';
alert(typeof box); //box是String类型,值是'abc',类型返回的字符串是string

var box=250;
alert(typeof box); //box是Number类型,值是250,类型返回的字符串是number

//空的对象,表示这个对象创建了,里面没东西
//空对象,表示没有创建,就是一个null

var box={}; 或者 var box=new Object();
alert(typeof box); //box是Object类型,值是[object Object],类型返回的字符串是object

var box=null;
alert(typeof box); //box是Null类型,值是null,类型返回的字符串是object

function box(){

}
alert(typeof box); //box是Function函数,值是function box(){},类型返回的字符串是
function

alert(undefined==null); //他们都是空的,所以相等理所当然

-------------------------------------------------------------------------------

类型转换

显式类型转换
var box='';var box=0;var box=NaN;var box=null;var box=undefined; var box;
alert(Boolean(box)); //false
隐式类型转换


八进制:以8为基数,前导必须是0,八进制序列(0~7)
var box=070;//八进制
alert(box); //按照十进制输出56

var box=079;//无效的八进制,自动解析为79


十六进制
var box=0xA;
var box=0x1f;
alert(box);

浮点型:
var box=3.80;
alert(box); //3.8

var box=8.0 //自动转换成整型,由于保存浮点数值需要的内存空间比整型数值大两倍
alert(box);

科学计数法:
var box=4.13e3 var box=4.13*1000 两者相等

最小值:
alert(Number.MIN_VALUE); //5e-324 最小值
alert(Number.MAX_VALUE); //1.7976931348623157e+308 最大值
如果超过了浮点数值范围的最大值或最小值,那么就会出现Infinity(正无穷)或者-
Infinity(负无穷)。
例如:
var box=100e1000; //超出范围,Infinity(正无穷)
var box=-100e1000; //超出范围,-Infinity(负无穷)
也可以通过Number.POSITIVE_INFINITY和Number.NEGATIVE_INFINITY得到Infinity(正无穷)
或者-Infinity(负无穷)的值。
alert(Number.POSITIVE_INFINITY); //Infinity(正无穷)
alert(Number.NEGATIVE_INFINITY); //-Infinity(负无穷)

var box=100e10;
alert(isFinite(box)); //true 没有超过最大值


var box=0/0; //数学中第一个可以为0,第二个不可以为0
alert(box); //NaN

var box=12/0; //Infinity
var box=12/0*0 //NaN

alert(Number.NaN) //NaN

var box=NaN+1; //NaN

alert(NaN==NaN); //false

var box=0/12;
alert(isNaN(box)); //false

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

//如果对象的toString方法能够返回数值,那么就不是NaN了。
var box={
toString:function(){
return 'Lee'
}
}
var box={}
alert(isNaN(box)); 以上两种写法都是true

var box={
toString:function(){
return '123'
}
}
alert(isNaN(box)); 这种写法返回false

有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。Number()函数是
转型函数,可以用于任何数据类型,而另外两个则专门用于把字符串转成数值。
alert(Number(true)); //Boolean类型的true和false分别转换成1和0
alert(Number(25));// 25,数值型直接返回
alert(Number(null)); //0,空对象返回0
alert(Number(undefined));//NaN


alert(Number('0456')); //456
alert(Number('070')); //70
alert(Number('08.90')); //8.9
alert(Number('')); //0
alert(Number('123Lee123')); //NaN

var box={
toString:function(){
return 123
}
};
alert(box)

由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用
parseInt()
alert(parseInt(null)); //NaN
alert(parseInt(undefined)); //NaN
alert(parseInt(true)); //NaN
alert(parseInt('456Lee')); //456
alert(parseInt('Lee456Lee')); //NaN
alert(parseInt('12Lee456Lee')); //12
alert(parseInt('56.12')); //56
alert(parseInt('')); //NaN
也可以转换八进制和16进制
ECMAScript为parseInt()提供了第二个参数,用于解决各种进制的转换。
alert(parseInt('0xAF')); //175,十六进制
alert(parseInt('AF',16)); //175,第二参数指定十六进制,可以去掉0x前导
alert(parseInt('AF'));//NaN
alert(parseInt('101010101',2));//314,二进制转换
alert(parseInt('70',8)); //56,八进制转换

alert(parseFloat('0xA')); //0 不认识十六进制
alert(parseFloat('123.4.5')) //123.4 只认一个小数点
alert(parseFloat('0123.400')) //123.4,去掉前后导
alert(parseFloat('1.234e7')); //12340000,把科学计数法转成普通数值

换行符:\n
制表符:\t
空格:\b
回车:\r
斜杠:\\
单引号:\'
双引号:\"

toString()方法
var box=true;
alert(box.toString()); //'true'

var box=10;
alert(box.toString(2));//'1010'

toString()是不能够转换null 和undefined类型的,如果在转型之前不知道变量是null或者
undefined的情况下,我们还可以使用转型函数String(),这个函数能够将任何类型的值转换为
字符串。
var box=null;
alert(String(box)); //'null'

var box;
alert(String(box)); //'undefined'

String()方法很智能。如果值有toString()方法,就使用toString()方法,如果是null或者
undefined就返回null或者undefined

创建对象的三种方法:
var box=null;
var box={};
var box=new Object();

var box=new Object(2);
alert(box); //2 自动执行toString()方法


看一个例子:
var box=new Object(2);
var age=100;
alert(box+age); //typeof box是object typeof box是number 竟然可以运算,这就是
javascript,底层自动转换

posted @ 2017-07-07 14:06  耿鑫  阅读(119)  评论(0)    收藏  举报