《高级程序设计》3.4 数据类型
javascript有5种简单数据类型(也称基本数据类型)Undefined、Null、Boolean、Number和String。还有一种复杂数据类型——Object
用typeof操作符可以检测给定变量的数据类型:
var message="some thing";
alert(typeof message); //"string"
alert(typeof 95); //"number"
1)Undefined类型
Undefined类型只有一个值,就是undefined。使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
对于尚未声明的变量,只能执行一项操作,即typeof检测其数据类型。
so,即便未初始化的变量会自动被赋予undefined值,但显示地初始化变量依然是明智的选择。如果能做到这一点,那么当typeof操作符返回“undefined”值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。
var message;
alert(message==undefined); //true
alert(age); //会报错!!!
alert(typeof message); //undefined
alert(typeof age); //undefined
2)Null类型
Null类型也是只有一个值,即null。表示一个空对象指针,所以typeof一个为null值的变量返回的是“object”
alert(null==undefined); //true
如 果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确 地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。
3)Boolean类型
Boolean类型只有两个字面值:true和false。如果要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符 | “”(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Objec | 任何对象 | bull |
Undefined | 不适用 | undefined |
4)Number类型
①浮点数值
对于极大或极小的数值,可以用e表示法(即科学计算法)。
浮点数值计算会产生舍入误差问题:浮点数值的最高精度是17位,但在进行算术计算时,其精确度远远不如整数。例如:0.1+0.2的结果不是0.3,而是0.30000000000000004。
so,永远不要测试某个特定的浮点数值
var a=0.1,b=0.2,c=0.15,d=0.15;
alert(a+b); //0.30000000000000004
alert(c+d); //0.3
②数值范围
javascript能够表示的最小数值保存在Number.MIN_VALUE中,这个值是5e-324;
最大数值保存在Number.MAX_VALUE中,这个值是1.7976931348623157e+308;
在javascript计算中如果得到一个超出javascript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值,即如果这个数值是负数,则被转换为-Infinity(负无穷),如果为正数,则是Infinity(正无穷)
③NaN
即非数值(Not a Number)是一个特殊的数值,这个数值用于表示本来要返回数值的操作数未返回数值的情况。例如:在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在javascript中返回NaN,因此不会影响其他代码的执行。
NaN与任何值都不相等,包括NaN本身。任何涉及NaN的操作(NaN/10)都会返回NaN。
isNaN()函数,确定这个参数是否“不是数值”
alert(isNaN(NaN)); //true;
alert(isNaN(10)); //false
alert(isNaN("10")); //false
alert(isNaN("blue")); //true
alert(isNaN(true)); //false
④数值转换
有3个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat();
Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。
Number()函数的转换规则:
- 如果是Boolean值,true和false将分别被转换为1和0;
- 如果是数字值,只是简单的传入和返回;
- 如果是null值,返回0;
- 如果是undefined值,返回NaN;
- 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带加号或逗号),将其转换为十进制。即“123”转换为123。“011”转换为11(忽略前导0);
- 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
- 如果字符串中包含有效的十六进制,则将其转换为十六进制;
- 如果字符串是空的,不包含任何字符,则将其转换为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 var num5=Number("1234value"); //NaN var num6=Number("1.34a"); //NaN // 对比 var num7=parseInt("1234value"); //1234 var num8=parseInt("1.34a"); //1
在处理整数的时候,更常用的是parseInt()函数。
parseInt()函数转换规则:
- 如果第一个字符不是数字或者负号,返回NaN。
- 如果第一个字符是数字,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如“1234blue”会被转换为1234;
- 如果字符串中的第一个字符是数字字符,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"); //70 注意,javascript5引擎已经不具备解析八进制的能力,因此前导的0会被认为无效。
var num6 = parseInt("70"); //70
var num7 = parseInt("0xf"); //15
// so 针对整数格式的转换的困惑,可以为这个函数提供第二个参数,即:
var num55=parseInt("070",8); //56
var num66=parseInt("70",10); //70
var num77=parseInt("0xf",16); //15
// so 多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。
与parseInt()类似,parseFloat()也是从第一个字符开始解析,直到遇见一个无效的浮点数字字符为止。也就是说字符串中的第一个小数点是有效的,而第二个小数点就是无效了。
其次,parseFloat()只解析十进制值,因此十六进制会被解析为0;
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"); //0908.5
var num6=parseFloat("3.125e7"); //31250000
5)String类型
字符串可以用双引号(“)或者单引号(‘)表示;
String数据类型包含一些特殊的字符字面量,也叫转义序列
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号(’),在用单引号表示字符串时使用。例如:‘He said,\'hey.\'’ |
\" | 双引号(”),在用双引号表示字符串时使用,例如:"He said,\"hey.\"" |
\xnn | 以十六进制代码nn表示的一个字符串(其中n为0~F)。例如,\x41表示“A” |
\unnn | 以十六进制代码nnnn表示的一个Unicode字符串(其中n为0~F)。例如,\u03a3表示希腊字符Σ |
toString()方法
注意这个是方法跟parseInt()是函数的区别。
- 数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有这个方法。
- 多数情况下,不必传递参数。但也可以指定基数,改变输出的值。
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"
6)Object对象类型
javascript中的对象是一组数据和功能的集合,可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。
var o=new Object();
详见。。。。。。