javaScript 数据类型
一、Number类型 整数: a、十进制 var num=510; b、八进制字面值第一位必须是0 var num1=070;//八进制的56 var num2 =079;//无效的八进制—解析为79 var num3 =08;// 无效的八进制—解析为8 (超过当做十进制数解析) c、十六进制前面则必须是0x,后跟十六进制数字(0~F),不分大小写 var num1 = 0xA; var num2 = 0x1f; 注意:虽然可以表示为八进制和十六进制,但是计算时会被转换成十进制值。 浮点数: var num1 = 1.1; var num2 =0.1; var num3 = .1;//有效,但不推荐 注意:在保存整数时内存分配大小只有浮点数的1/2,所以当浮点数可以转换为整数时,javascript会自动转换为整数。 0.1+0.2不等于0.3,而是0.3000000000000004,所以在做判断时,千万不要用浮点数相加判断等于预想中的某个值。 科学计数法计数: var num=123.456e10; 注意:最小值-->Number.MIN_VALUE 最大值-->Number.MAX_VALUE不在范围自动转换成Infinity值,如果是负数,就是-Infinity,整数就是Infinity。Infinity的意思是无穷,也就是正负无穷,跟数学中的概念是一样的。但是Infinity是无法参与计算的。可以用原生函数确定是不是有穷:isFinite();只有位于数值范围内才会返回true。 常用函数: isNaN()函数的转换规则如下: 在Javascript中NaN用于表示一个本来要返回数值的操作数未返回数值的情况。 NaN(非数值 Not a Number)的特点: 1、任何涉及NaN的操作(如:NaN/0)都会返回NaN. 2、NaN与任何值都不相等,包括NaN本身 Number()函数的转换规则如下: ● 如果是Boolean值,true和false将分别被替换为1和0 ● 如果是数字值,只是简单的传入和返回 ● 如果是null值,返回0 ● 如果是undefined,返回NaN ● 如果是字符串,遵循下列规则: ○ 如果字符串中只包含数字,则将其转换为十进制数值,即”1“会变成1,”123“会变成123,而”011“会变成11(前导的0被忽略) ○ 如果字符串中包含有效的浮点格式,如”1.1“,则将其转换为对应的浮点数(同样,也会忽略前导0) ○ 如果字符串中包含有效的十六进制格式,例如”0xf“,则将其转换为相同大小的十进制整数值 ○ 如果字符串是空的,则将其转换为0 ○ 如果字符串中包含除了上述格式之外的字符,则将其转换为NaN ● 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。 var num1 = Number("Hello World"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1 由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。 parseInt()函数的转换规则如下: 函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符串不是数字字符或者负号,parseInt()会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,praseInt()会继续解析第二个字符,知道解析完所有后续字符或者遇到了一个非数字字符。例如,"1234blue"会被转换为1234,”22.5“会被转换为22,因为小数点并不是有效的数字字符。 如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(即十进制、八进制、十六进制)。 var num1 = parseInt("1234blue"); //1234 var num2 = parseInt(""); //NaN var num3 = parseInt("0xA"); //10(十六进制) var num4 = parseInt("22.5"); //22 var num5 = parseInt("070"); //56(八进制) var num6 = parseInt("70"); //70 var num7 = parseInt("10",2); //2(按二进制解析) var num8 = parseInt("10",8); //8(按八进制解析) var num9 = parseInt("10",10); //10(按十进制解析) var num10 = parseInt("10",16); //16(按十六进制解析) var num11 = parseInt("AF"); //56(八进制) var num12 = parseInt("AF",16); //175 parseFloat()函数的转换规则如下: 与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。例如,”22.34.5“将会被转换成22.34。 parseFloat()和parseInt()的第二个区别在于它始终都会忽略前导的零。由于parseFloat()值解析十进制值,因此它没有用第二个参数指定基数的用法。 var num1 = parseFloat("1234blue"); //1234 var num2 = parseFloat("0xA"); //0 var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34 var num5 = parseFloat("0908.5"); //908.5 二、Boolean类型 这个类型只有两个值:true 和false。虽然只有两个值,但是javascript中所有类型的值都有与这两个值等价的值。要将一个值转换为对应的Boolean值,可以调用转型函数Boolean() 其实在 if 语句判断中,会对里面的条件自动执行Boolean变化的。 三、String类型 var str1 = "Hello"; var str2 = 'Hello'; alert(str1.length); //输出5 toString()方法: 要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。 var age = 11; var ageAsString = age.toString(); //字符串"11" var found = true; var foundAsString = found.toString(); //字符串"true" 数值、布尔值、对象和字符串值都有toString()方法。但null和undefined值没有这个方法。 多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。 var num = 10; alert(num.toString()); //"10" alert(num.toString(2)); //"1010" alert(num.toString(8)); //"12" alert(num.toString(10)); //"10" alert(num.toString(16)); //"a" String()方法: 在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。String() 函数遵循下列转换规则: ● 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果 ● 如果值是null,则返回"null" ● 如果值是undefined,则返回”undefined“ var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); //"10" alert(String(value2)); //"true" alert(String(value3)); //"null" alert(String(value4)); //"undefined" 四、undefined类型 如果声明变量却没有初始化,则当前变量的值就是undefined。在较老的浏览器对象并没有undefined这个属性,所以如果使用到undefined的操作将会导致失常,故采用这样的方式,不过一开始看会有点难理解,在旧版本的浏览器中会因为没有window.undefined这个对象而返回一个undefined值,所以这样做可以兼容旧浏览器。 不过包含undefined值的变量与未定义的变量是不一样的,如: var name; alert(name);//undefined alert(age);// 错误:age is not defined 还没声明过的变量只能执行一项操作,其他全都不能做,就是使用typeof操作符检测其数据类型。 如果不管声明过未初始化以及未声明过的变量执行typeof都是返回undefined的值。两种变来那个都不能执行真正的操作 typeof()方法: 由于Javascript中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字,在上面提到的ECMAScript中的5种简单数据类型中,(记住,这5种只是数据类型,代表一种数据类型,就想C#中的int,string类型一样),通过typeof关键字,对这5种数据类型会返回下面的值(以字符串形式显示 “undefined” ---------- 如果值未定义 Undefined “boolean” ---------- 如果这个值是布尔值 Boolean “string” ---------- 如果这个值是字符串 String “number” ---------- 如果这个值是数值类型 Number “object” ---------- 如果这个值是对象或null Object “function” ---------- 如果这个值是函数 Function 五、Null类型 Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因,例如: var car = null; alert(typeof car); // "object" 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了,例如: if(car != null) { //对car对象执行某些操作 } 实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。 alert(undefined == null); //true 尽管null和undefined有这样的关系,但它们的用途完全不同。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined,可是同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。 六、Object类型 例子1: 对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔: var person={firstname:"Bill", lastname:"Gates", id:5566}; 上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。 空格和折行无关紧要。声明可横跨多行: var person={ firstname : "Bill", lastname : "Gates", id : 5566 }; 对象属性有两种寻址方式: name=person.lastname; name=person["lastname"]; 例子2: Object类型是Javascript引用类型的鼻祖了,(就跟在C#和Java中是一样的道理),在创建Object类型的实例后可以为其添加属性和方法, var o = new Object;//有效,不推荐 var o =new Object(); 说明: 在Javascript中,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。每个实例都有如下的属性和方法,如下: 1、constructor ,保存着用于创建当前对象的函数。上面构造函数就是Object(); 2、hasOwnProperty,用于检查给定的属性是否在当前对象实例中,是就true,不是在实例中,而是在原型中,则是false; 3、isPrototypeOf,用于检查传入的对象是否是另一个对象的原型 4、propertyIsEnumerable,用于检查给定的属性是否能够使用for…in语句来枚举, 5、toString,返回对象的字符串表示 6、valueOf,返回对象的字符串、数值或布尔值表示,通常与toString方法返回值相同 以上就是Object所具有的属性和方法,所有对象都会因为继承关系而继承这些属性和方法。 七、数组 下面的代码创建名为 cars 的数组: var cars=new Array(); cars[0]="Audi"; cars[1]="BMW"; cars[2]="Volvo"; 或者 (condensed array): var cars=new Array("Audi","BMW","Volvo"); 或者 (literal array): 实例 var cars=["Audi","BMW","Volvo"];