3.4、数据类型:
五种简单的数据类型,Undefined,Null,Boolean,Number,String。
一种复杂的数据类型:Object(Object本质是由一组无序的名值对组成)。
ECMAScript不支持自己创建的类型,所有值最终都是上面6种之一
3.4.1、typeof:可返回的值:undefined,boolean,string,number,object,function(函数不是数据类型,但是有一些特殊属性,所以由于必要区分),(不含Null的数据类型)
alert(typeof message)和alert(typeof (message))都是一样的,但是typeof不是函数,这一点要注意。alert(typeof 100);这也是可以的。
3.4.2、Undefined:只有一个值,undefined。
var message;
alert(message==undefined);//true
等价于
var message=undefined;
alert(message==undefined);//true,不过没这个必要~
包含undefined值的变量与尚未定义的变量还是不一样的,
var message;
alert(message);//“undefined”
alert(age);//产生错误
对于未声明的变量,只能使用typeof检测其数据类型,但是检测是会出现与为初始化相同的状况。
var message;
alert(typeof message);//“undefined”
alert(typeof age);//“undefined”
最好能在声明时就赋值,这样便于区分是否未声明。
3.4.3、Null:就只有null值。
从逻辑上讲null值表示空对象指针,这也是检测时出现object的原因,
var car=null;
alter(typeof car);//"object"
如果定义的变量准备保存对象,那么最好将该变量初始化为null而不是其他值,这样就只要检查null就可以知道相应变量是否已经保存对象的引用了。
如:if(car!=null){
//对car对象执行某些操作
}
实际上undefined值是派生自null值的因此ECMA-262规定对它们的相等性测试返回值是true。
alter(undefined==null);//true
不过出于比较的目的会转换其操作数。
null和undefined有这样的关系,但用途和用法完全不同,所以需要区分~
3.4.4、Boolean:true和false(注意true不一定等于1,false也不一定等于0,还有注意true和false是区分大小写的,True和False都不是Boolean的值)
虽然Boolean值只有两个,但是所有类型都有与其对应的值,只要调用Boolean(),就可以转换。
转换为true:string 任何非空字符串;Number 任何非零数字(包括无穷大);Object任何对象;Undefined n/a(或N/A,not applicable 的缩写,意思是不适用);
转换为false:string “”(空字符串);Number 0和NaN;Object null;Undefined undefined;
在控制流语句中,这些转换是自动执行的。
var message=“hi”;
if(message){alter(“123”);}
运行会有一个警告框,因为自动转换了string为Boolean。
3.4.5、Number
最常见的是十进制的得数。
八进制:前面带零,后面只要每位不超过8,就是有效的,若有任何一位超过8,解析为对应的十进制,前导零去掉。
var octalNum=070;//八进制的56
var octalNum=079;//无效八进制数值—解析为79
var octalNum=08;//无效八进制数值—解析为8,
十六进制:前两位是0x,后面可以是0~9,a-f或A-F大小写都行。
var hexNum=0xA;//十六进制的10
var hexNum=0x1f;//十六进制的31
虽然可以进行表示,但在进行算数计算时,最终都是转换成十进制数值的。
1、浮点数值:
var floatNum=1.1;
var floatNum=0.1;
var floatNum=.1;//有效,但是不推荐
var floatNum=1.;//自动转换成整型1
var floatNum=10.0;//自动转换成整型10
var floatNum=3.125e7//表示31250000,(大写的E也行)
var floatNum=3e-7//表示0.0000003
默认情况下,小数点后带6个零以上就会自动转换成带e的科学计数发。
var floatNum=0.0000003//系统转换为3e-7
还有不要进行特定浮点数的数值比较:例如0.1+0.2=0.30000000000000004,由于采用IEEE754数值的浮点计算通病,最高精确到17位小数。
2、数值范围
ECMAScript中保存的最小数Number.MIN_VALUE中的,一般是5e-324,超过的话就是-Infinity(负无穷)
最大值Number.MAX_VALUE中的1.7976931348623157e+308,超过的话就是Infinity(正无穷)
超过之后就无法参加下一步计算~
可用isFinite()来检测是否超出范围,未超出就会返回true
Number.NEGATIVE_INFINITY和Nuber.POSITIVE_INFINITY中保存着-Infinity和Infinity。
3、NaN(即非数值,Not Number,是特殊的数值)用来表示一个要返回数值的操作,但是没有返回数值,这样就不会抛出异常了。
在其他语言中/0会报错,但是ECMAScript中/0返回NaN
两个特点:
任何包含NaN的数值都返回NaN
NaN与任何止步相等,包括其本身。alert(NaN==NaN);//false
针对这两个特点,用isNaN()测试,如果可以转换成数值就返回false,不能就返回true
alter(isNaN(NaN));//true
alter(isNaN(10));//false
alter(isNaN("10"));//false
alter(isNaN("blue"));//true
alter(isNaN(true));//false,转换成1
4、数值转换:Number(),parseInt(),parseFloat()
Number():
Boolean,true和false转换成1和0;
数字,简单的传入传出;
null,返回0;
undefined,NaN;
字符串,
只包含数字,直接转换成十进制数(前导零忽略)
包含有效浮点格式的,转换成对应的浮点格式(前导零忽略)
如果是十六进制的转换成相应的十进制数
空的(不包含任何字符),将其转换成0
除上述格式之外的,转换成NaN
如果是对象,则先调用对象的valueOf()方法,然后依照前面的值转换返回的值。如果返回的是NaN,则调用对象的toString()方法然后一次调用前面的。
var num=Number("Hello world!");//NaN
var num=Number("");//0
var num=Number("000011");//11
var num=Number(true);//1
parseInt()会忽略字符串前面的空格,知道找到第一个非空格字符,
如果第一个字符不是数字字符或者负号,返回NaN;
符合就会继续解析下一个字符,知道不是为止,包括小数点;
如果字符串中第一个是0,就是八进制,0x就是16进制,
var num=parseInt("1234blue");//1234
var num=parseInt("");//NaN
var num=parseInt("0xA");//10(十六进制)
var num=parseInt(22.5);//22
var num=parseInt("070");//56(八进制),注意与Number()不同,Number()是
var num=parseInt("70");//70(十进制)
var num=parseInt("0xf");//15(十六进制)
parseInt()可以有第二个参数,用来规定基数的进制,以免出现0导致解析错误的情况。
parseFloat()会转换解析到的参数,直到遇到无效字符(只解析十进制)。
var num=parseFloat("1234blue");//1234(整数)
var num=parseFloat("0xA");//0
var num=parseFloat("22.5");//22.5
var num=parseFloat("22.34.5");//22.34
var num=parseFloat("0908.5");//908.5
var num=parseFloat("3.125e7");//31250000
3.4.6、String类型
在ECMAScript中"和‘的用法相同
1、字符字面量:\转义字符
\n 换行,\t 制表,\b 空格,\r 回车,\f 进纸 ,\\ 斜杠,\' 单引号,
\" 双引号\xnn 以十六进制表示的一个字符(n为0-f),例如\x41表示'A',
\unnnn 以十六进制表示Unicode字符,例如\u03a3表示希腊字母西格玛,
任何字符串都有.length属性
2、字符串特点:字符串一旦创建值就不能改变。
例如:var lang=“Java”;
lang=lang+“Script”;
首先创建一个能容纳10个字符串的新字符串,然后用Java和Script填充,最后是销毁原来的字符串Java和Script。
3、转换为字符串
数值,布尔值,对象,字符串值都有toString()方法,(字符串本身调用就是返回一个字符串的副本),null和undefined没有该方法。
一般调用无需参数,数值调用时可转换成其他进制的,
String()方法,如果有toString(),调用该方法;如果没有,null返回null,undefined返回undefined。
var a=10;
alert(a.toString());//"10"
alert(String(a));//调用方法不一样
3.4.7、Object
创建一个Object实例可以使用
var o=new Object();
var o=new Object;//如果不带参数,也可以这么做。但是不推荐。
Object具有的属性和方法。
constructor--保存着用于创建当前对象的函数,对于前面而言,就是Object();
hasOwnPropertyName(propertyName)--用于检查给定的属性在当前的实力对象中是否存在(不是实例的原型中),propertyName必须以字符串形式传入。例如o.hasOwnPropertyName(“name”)
isPrototypeOf(object)--用于检查传入的对象是否是另一个对象的原型
propertyIsEnumerable(propertyName)--用来检查给定的属性是否能够用for-in语句来枚举,
toString()--返回对象的字符串表示、
valueOf()--返回对象的字符串、数值、或布尔值表示。通常与toString()方法返回的一样。
由于Object是最基本的类,所以所有对象都有这些属性和方法。