ECMAScript中一共有5种简单数据类型(基本数据类型):Undefined,Null,Boolean,Number,String.
和1中复杂数据类型:Object.
typeof操作符
因为ECMAScript是弱语言(松散型)语言,所以需要一种方式来检测数据的类型。
typeof的返回值:
1.”undefined”-如果该值未定义
2.”boolean”-如果该值是布尔值
3.”string”-如果该值是字符串
4.”number”-如果该值是数值
5.”object”-如果该值是对象或者null
6.”function”-如果该值是函数
Undefined
Undefined类型的值只有一个,就是特殊的undefined.
如:
var info;
alert(info==undefined);//true
//同上
var info=undefined;
alert(info==undefined);//true
这里有一点比较特殊
即对变量使用typeof函数时出现的情况:
var info;//变量声明后默认取得值undefined
//下方值没有声明
//var info2;
alert(typeof info);//"undefined"
alert(typeof info2);//"undefined"
//如果直接输出变量
alert(info);//"undefined"
alert(info2);;//产生错误
这里在看上面部分时,可以理解为info,info2虽然在技术角度上看是由区别的,但是在实际使用时,无论对哪一个变量,都无法执行任何真正的操作。
Null
Null类型的值只有一个,就是特殊的null.
逻辑角度看:null值表示一个空对象指针。所以使用typeof时将会返回”object”.
var info=null;
alert(typeof info);//"object"
实际上,undefined值是派生自null值的,所以在用以下代码时,将会返回true.
alert(null==undefined);//true
当然,这里的(==)操作符出于比较的原因将会对其操作数进行转换。
Boolean
Boolean类型的值只有2个,即:true和false.
但是这里的true和false与数字值不一样,因此true不一定等于1,false不一定等于0.
Boolean类型的值是区分大小写的,所以True,False与true,false是不一样的.
虽然Boolean类型的字面值只有2个,但是所有其他类型都有其对应的boolean值,即所有类型都可以使用Boolean()函数来转化为对应的boolean值。如:
var info="hello world";
var infoBoolean=Boolean(info);
对应的返回值如下表所示:
类型 转换为true 转换为false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined n/a(或N/A,不适用) undefined
Number
1.整数值:
var info=10;//十进制整数
var info=070;//八进制56 ;八进制的第一位必须为0,之后每一位都为(0-7),如果有一位超出范围,则忽略前导零
var info=08;//解析为8
同理,十六位进制的前导为0x,之后每一位为(0-9)(A-F),(A-F)页可以是(a-f).
var info=0xA;//十六进制10
算数计算时,八进制和十六进制的数将会转化成十进制数
2.浮点值
在保存浮点值时,所需的保存空间是整数值的两倍,因此,ECMAScript将会不失时机的将浮点值转化为整数值
var info=1.//解析为1
var info=1.0//解析为1
对于极大极小值(可以使用e表示法,即科学计数法):
var info=3.125e7//等于31250000
浮点数的最高精度是17位小数,但是在进行算数计算时,精度会下降,比如:
//0.1加0.2的值不等于0.3,而是0.30000000000000004
if(a+b==0.3){
alert("hello");//无法实现
}
3.数值范围
ECMAScript所能保存的最小值保存在Number.MIN_VALUE中,大多数浏览器中,该值为5e-324;所能保存的最大值保存在Number.MAX_VALUE,大多数浏览器中,该值为1.7976931348623157e+309。
如果在某次计算中得出了超过范围的数值,则该数值将会自动转换为Infinity值或者-Infinity。如果某个值为Infinity或者-Infinity,则该值将不能进行之后的运算。
//可以使用 isFinite()函数检查一个值是否有穷
var info=Number.MIN_VALUE+Number.MAX_VALUE;
alert(isFinite(info));//false
4.NaN
NaN(非数值),该值用来表示本来要返回数值的操作数未返回数值的情况(即不会抛出错误)。比如数值除以非数值,将会返回NaN。
任何涉及NaN的操作都会返回NaN(如NaN/10)。
NaN与任何值都不相等,包括自身。
//可以通过isNaN()函数检测一个值是否为数值,不能转换为数值的都会返回true
alert(isNaN(NaN));//true
alert(isNaN(10));//false
alert(isNaN("10"));//false
alert(isNaN("blue"));//true
alert(isNaN(true));//false
对象也可以被isNaN()函数调用,当被调用时,将会先调用对象的valueof()方法,然后确定该方法的返回值是否可以转换为数值,如果不不能,则基于该返回值再调用toString()方法,再测试返回值。(这也是ECMA中内置函数和操作符的一般执行流程)
5.数值转换
共有3个数值转换函数:
1.Number()
2.parseInt()
3.paresFloat()
1可用于任何数值类型,2和3则转么用于将字符串转化为数值。
Number()转化规则:
1.Boolean. true->0;false->0
2.数字值. 即等于传入和返回
3.null. 0
4.undefined. NaN
5.字符串:
只包含数字. 转化为十进制数值.
只包含浮点格式. 转化为对应的浮点值
只包含十六进制. 转化为对应的十进制数值
空的. 转化为0
其余的. NaN
6.对象. 先调用对象的valueof方法,按照上面的规则转换,如果结果为NaN;则调用toString()方法,再按照上面的方法检测返回值.
Number()在转换字符串数值时会显得比较繁琐,因此可以使用parseInt()和parseFloat()方法转换字符串数值。
parseInt()在转换字符串时,将会忽略前面的空格,直到找到第一个非空字符,如果第一个字符不为数字或者负号,则返回NaN;如果第一个是数字或者负号,则继续解析,直到不是数字为止,所以”1234hello”将会被解析为 1234 ;”22.1”将会被解析为 22 .
parseFloat()同理,只不过其只会接受一个小数点,如”12.34.5”将会被解析为 12.34 .
String
String类型用于表示由零或者多个由16位Unicode字符组成的字符序列,即字符串。
一些转义字符:
\n 换行
\t 制表
\b 退格
\r 回车
\f 换页符
\\ 斜杠
\' 单引号
\" 双引号
\xnn 十六进制,n为(0-F)
\unnn 十六进制表示的Unicode字符
1.字符串特点:
当字符串创建时,其值就不能不能被改变了,要改变某个变量所保存的字符串,首先需要销毁原来的字符串,然后将新字符串填充该变量。
2.转换为字符串
把一个值转换为字符串有2种方法:
1.几乎每个值都有的toSting()方法。(null和undefined值没有该方法;数值,布尔值,对象和字符串值都有该方法)
在使用toString()函数时,可以通过传递参数来控制返回值的进制,如:
var info=10;
info.toString();//10
info.toString(2);//1010
...
之前也提到过Null和Undefined值是没有toSting()函数的,那么如果不知道一个值是否为null或者undefined的时候,可以使用Sting()函数,该函数能将任何类型的值转换为字符串。其遵守规则如下:
1.如果值有toSting()函数,则调用toString()函数。
2.如果值是Null,则返回”null”。
3.如果值是undefined,则返回”undefined”。
Object
Object类型其实就是一组数据和功能的集合,通过使用关键词new加上想要创建的类型的名字来创建。
如果创建Object类型的实例并且给其添加属性方法,就可以创建自定义对象:
var info=new Object();
Object的每个实例都拥有以下属性和方法:
constructor //保存着用以创建当前对象的函数,上面例子中就是Object()
hasOwnProperty() //用以检查给定的属性在实例中是否存在,但不包括实例的原型属性
isPrototypeOf(Object) //检查传入的对象是否为当前对象的原型
propertyIsEnumerable() //检查给定的属性是否能够通过for-in语句来枚举
toLocaleString() //返回对象的字符串表示,该字符串和执行环境对应
toString() //返回对象的字符串表示
valueOf() //返回对象的字符串,数值,布尔值表示