基本数据类型(Undefined,Null,Boolean,Number,String)和复杂数据类型(Object,本质上由一组无序的名值组成),ECMAScript数据类型具有动态性,不需要再定义其他类型。
typeof操作符,返回字符串:undefined(如果这个值未定义),boolean,string,number,object(如果这个值是null或者对象),function(如果这个值是函数)
Undefined类型
只有一个值,undefined
Null类型
只有一个值,null,如果定义的变量准备在将来用于保存对象,那么最好将它初值赋值为null
alert(null == undefined); //true
Boolean类型
两个值,true false
转换 Boolean() ture: 任何非空字符,任何非零数值,任何对象
flase:空字符穿"",0和NaN,null,undefined
Number类型
三类:整数,浮点数,NaN(表明不是一个数,也是Number类型)
整数:八进制表示(前置0),十六进制表示(前置0x)
浮点数:
alert(0.1+0.2==0.3);//false ,IEEE754数值精度问题
Number.MAX_VALUE这个值巨大,1.79e+308
alert(Number.MAX_VALUE*Number.MAX_VALUE);溢出时,转化为特殊的Infinity值
NaN:
定义:除0得到该结果或者目标值不是数值
alert(NaN == NaN);//false
isNaN()函数:true:NaN,10,"10"(可以被转化为10),true(可以被转化为1)
false:"blue"
适用于对象,先调用对象的valueof()方法,如果不能再调用toString()方法,在基于上述规则判断。
数值转换:Number(),parseInt(),parseInt(,),parseFloat()
Number()规则:
true 1,false 0
null 0
undefined NaN
字符串:空 0,只含数字 转换成十进制数(前导0将忽略,不会被当做8进制),十六进制字符 转换成同等大小的十进制数值,有效的浮点数 转化成对应的浮点数(前导0忽略),其他 NaN
parseInt()规则:更多的是看是否符合数值模式,总体思想,忽略前面的空格(Number()不会忽略哦),以第一个非空字符开始,到第一个不是数字的字符结束。
parseInt(" 1234blue");//1234 parseInt(" -3264My");//-3264 parseInt("");//NaN parseInt("0xA");//10 parseInt("22.5");//22 parseInt("070");//56 (8进制) Number(" 1234blue");//NaN Number(" -3264My");//NaN Number("");//0 Number("oxA");//10 Number("22.5");//22.5 Number("070");//70(不支持8进制)
parseInt("14",5);//9,按5进制解析
parseFloat()规则,与parseInt()思想一致
paresFloat(" 1234blue");//1234(整数,他的确返回的是整数)
parseFloat("0xA");//0 只解析十进制的数
String类型
不可变,一旦创建不可改变,若变就重新建新的字符串实例。
var strChange = "a"; //创建a
strChange = strChange + "b"; //创建b,创建新的实例填充ab,销毁a和b
数值的toString()方法,Num.toString(n),用n进制显示,n默认是10
Object类型 对象是一组数据和功能的集合
对象可以通过执行 new 操作符后跟要创建的对象类型名称来创建
也可以创建Object类型的实例,再为其添加属性和方法,创建自定义对象。
function Person(strName,intAge) { this.name = strName; this.age = intAge; this.sayHello = function(){alert(this.name + "hello");}; } var person = new Person("Jam",10); var obj = new Object(); obj.name = "Lily"; obj.age = "9"; obj.sayHello = function(){alert(this.name + "hello");};