js数据类型

ECMAScript中有5种基本数据类型:Undefined、Null、Bollean、Number和String,1种复杂数据类型:Object。

鉴于ECMAScript是松散类型的,所以提供了检测给定变量的数据类型的操作符—typeof。对一个值使用此操作符可能返回下列某个字符串:

“undefined”—如果这个值未定义

“boolean”—如果这个值是布尔值

“string”—如果这个值是字符串

“number”—如果这个值是数值

“object”—如果这个值是对象或null

“function”—如果这个值是函数

l  Undefined类型

此类型只有一个值—undefined。在使用var声明变量但未对其加以初始化时这个变量就是undefined。

例:var age;

    alert(age);//”undefined”

    alert(typeof age);//”undefined”

下面是一个奇怪的现象:

     alert(typeof age);//”undefined”

     alert(age);//报错

如上,在没有进行申明变量的时候使用typeof仍然输出“undefined”。这就要求我们尽量显式地初始化变量,以致在使用typeof操作符时能区分变量到底是没有声明还是没有初始化。

l  Null类型

此类型也只有一个值—null,它表示一个空对象指针。所以使用typeof时会返回“object”字符串。

值得注意的是由于undefined值是由null值派生而来,因此ECMA-262规定它们的相等性测试要返回true。

例:alert(null==undefined);//true

任何情况下都没有必要把一个变量值显式地设置为undefined,但对null而言,只要意在保存的对象的变量还没有真正保存对象之前,推荐显式地让该变量保存null值。

l  Boolean类型

此类型有两个字面量值:true和false,区分大小写。

ECMAScript规定所有类型的值都可以调用转型函数Boolean()来将自身转化为对应的Boolean值。

转换规则:

数据类型

true

false

Number

任何非零数字值

0和NaN

String

任何非空字符串

空字符串

Object

任何对象

null

undefined

not/applicable

undefined

l  Number类型

最基本的数值字面量格式是十进制整数

例:var num=44;

八进制字面值第一位必须是0,然后才是八进制数字序列(0-7)

例: var num1=060;//八进制的48

         var num2=096;//无效八进制数值—解析为96

如上的num2,字面值中数值超出了范围,那么前导零将被忽略,后面的数值被当作十进制数值解析。注,八进制字面量在严格模式下无效,会导致支持的JavaScript引擎抛出错误。

十六进制自面值的前两位是0x,后跟任何十六进制数字(0-9和A-F,其中A-F大小写都行)。

在进行算术计算时,所有八进制和十六进制表示的数值最终都将被转成十进制数值。

(1)    浮点数值

例:var floatNum1=1.1;var floatNum2=0.1;var floatNum3=.1;

vat floatNum4=1.0; var floatNum5=1.;

   JavaScript中浮点数值需要的内存空间是保存整数值的两倍。因此,ECMAScript会某些情况下将浮点数转化为整数进行运算,如上定义的floatNum4和floatNum5。

   ECMAScript中科学计数法:(e是以10位底的幂中的指数)

例:var floatNum6=3.1215e10; var floatNum7=4e-10;

注意:由于浮点数的算术运算精确度不比整数,所以不要试着测试浮点数运算。例:alert((0.1+0.2)==0.3);

(2)    数值范围

ECMAScript中能表示的

最大值为Number.MIN_VALUE或Number.POSITIVE_INFINITY,最小值Number.MAX_VALUE或Number.NEGATIVE_INFINITY,超出范围的值会被自动转换成Infinity和-Infinity。

可以用isFinite()函数来判断一个数是否在最大和最小值之间。

(3)    NaN

用于表示一个本来要返回数值的操作数未返回数值的情况。

   任何值除以0都返回NaN。

NaN有两个特点,凡是涉及NaN操作的数会返回NaN; NaN和任何值都不等,包括自己。

例:alert(NaN==NaN)//返回false

最后提供isNaN()函数用于检测一个值是否“不是数值”。isNaN在接受到一个值时会自动尝试将其转换为数值。

例:alert(isNaN(NaN));//true

    alert(isNaN(10));//false

alert(isNaN(“10”));//false

    alert(isNaN(“yellow”));//true

alert(isNaN(“true”));//false

(4)    数值转换

数值转换提供3个函数,分别是Number(),parseInt(),parseFloat()。

 

Number()函数用于任何数据类型,有着如下转化规则:

Boolean值得true和false将分别被转换为1和0;

数字值只是简单的传入和返回;

null值返回0;

undefined返回NaN;

若是转字符串稍显复杂,这里不做具体的笔记了(P30)

例:var num1=Number(“hello”);//NaN

    var num2=Number(“”);//0

    var num3=Number(“000011”);//11

    var num4=Number(true);//1

 

parseInt()和parseFloat()只针对字符串进行转换。对parseInt()函数来说,如果第一个字符不是数字字符或负号,返回值为NaN,也即parseInt()会转换空字符串为NaN,而Number()对空字符串返回0,若第一个是数字字符,则会接着解析下去到最后或遇到非数字字符为止,同时此函数提供有指定基数作为第二个参数的方式来指定解析格式。而parseFloat()函数的不同之处在于它解析字符串的第一个小数点是有效的,第二个开始为无效;parseFloat()函数会只解析十进制值,所以它会自动忽略字符串中前面的零。

例:var num1=parseInt(“1123yellow”);//1123

    var num2=parseInt(“”);//NaN

    var num3=parseInt(“0xA”);//10

    var num4=parseInt(“22.5”);//22

    var num5=parseInt(“070”);//56

    var num6=parseInt(“AF”,16);//175

    var num7=parseInt(“AF”);//NaN

    var num8=parseFloat(“19yellow”);//19

    var num9=parseFloat(“0xA”);//0

    var num10=parseFloat(22.5.4);//22.5

    var num11=parseFloat(000908.5);//908.5

l  Sring类型

ECMAScript规定字符串可以由双引号(“)或单引号(‘)来表示。

(1)    字符字面量

也叫转义序列,用于表示非打印字符或具有其他用途的字符。例:

\n 换行  \t制表  \b空格  \r回车   \’单引号  \”双引号

\\ 斜杠  \unnnn  Unicode字符

这些字符字面量将被作为一个字符来解析。

(2)    字符串特点

  ECMAScript中字符串时不可变的,一旦创建,其值不会改变。

例:var lang=”java”;

lang=lang+”Script”;

在执行第二行时,首先创建一个能容纳10个字符的新字符串,然后再这个字符串中填充“java”和“Script”,最后销毁原来的字符串“java”和“Script”。

(3)    转换为字符串

除了null和undefined值外的其它类型值都有个toString()方法,通过传递基数,可以输出不同格式的字符串,不传参的话默认返回十进制字符串。

例:var num=10;

    alert(num.toString());//”10”

alert(num.toString(2));//”1010”

alert(num.toString(16));//”a”

对于null和undefined类型值可用String()返回相应值。

例:var value1=null;

   var  value2;

   alert(String(value1));//”null”

alert(String(value2));//”undefined”

l  Object类型

ECMAScript中对象是一组数据和功能的集合。通过new操作符创建对象

例:var o=new Object();

Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

n  Constructor:保存用于创建当前对象的函数

n  hasOwnProperty(propertyName):检查给定属性是否存在于当前对象中

n  isPrototypeOf(object):用于检查传入对象是否是另一个对象的原型

n  propertyIsEnumerable(propertyName):检查给定属性是否能使用for-in语句来枚举。

n  toLocaleString()

n  toString()

n  valueOf()

注:ECMA-262中对象行为不一定适用于JavaScript其他对象,例如BOM和DOM中的对象(宿主对象)。

 

posted @ 2016-05-22 23:47  好天气  阅读(210)  评论(0编辑  收藏  举报