JavaScript的数据类型,值和变量

一、数值型

1、JavaScript不区分整型和浮点型,所有数值都是浮点型表示,使用IEEE 754标准的64位表示。

2、整型字面量:十进制:0,12,10000等,十六进制:0xaf01,0XAFFF,八进制:0377(ECMAScript标准不支持,所以不是所有的JS解释器都支持八进制形式的数值字面量,自己写JS代码最好不用这种形式)。

3、浮点字面量,表示:[digit][.digit][(e|E)[(+|-)]digit],如3.14,.3333,2.1e10,3E-12

4、算法:操作符(+-*/%),Math提供的一些函数和常量,如Math.pow(), Math.E,Infinity(正无穷),-Infinity(负无穷),正数/0=Infinity,负数/0=-Infinity,0/0=NaN,无穷/无穷=NaN,Math.sqrt(负数)=NaN,3/hello=NaN

5、判断:isFinite(a)返回true,当且仅当a是数值型并且不是NaN,Infinity,-Infinity当中任何一个;x!=x返回true,当且仅当x为NaN;isNaN(x)当x为NaN或者非数值时(如字符串,对象)也返回true。

0===-0返回true,但是1/0===1/-0返回false,一个是Infinity,一个是-Infinity;二进制浮点引起的舍入误差:如:var x=0.3-0.2;var y=0.2-0.1;x==y返回false,这种情况会出现在所有已二进制表示浮点数的程序语言中,比如:Java,C,和C++都存在这个情况。

二、日期时间型

1、Date构造函数

var now=new Date();//当前时间 

var then=new Date(2010,0,1);var later = new Date(2010,1,23,12,34,29);//参数分别为y,m,d,hh24,mm,ss

var elapsed=later-then;//以毫秒为单位的时间间隔

2、Date方法:

later.getFullYear();later.getHours();later.getUTCHours();later.toUTCString();later.toISOString();later.toLocaleDateString();later.toLocaleTimeString();

三、文本型(字符串型)

1、JavaScript文本是一个不可变的Unicode字符有序序列,一个Unicode字符用16位表示。JavaScript没有其他语言那种可以表示单个字符的字符类型(Char)。

2、”\“后跟一个或多个特殊字符表示转义,如"\r"表示 return.  "\h":不是转义,此时的\将被忽略,所以"\h"=="h"返回true。ES5(ECMAScript 5),把"\"还可以作为换行连接符,把一个字符串分成多行来书写。

3、文本函数,var s=""I am here!;

s.length;//返回字符串的长度,也就是包含多少个16位,并不一定是多少个字符,因为有的单个字符会占用2个16位。但是大部分都是16位。

s.charAt(i);s.substring(s,l);s.slice();s.indexOf();s.lastIndexOf();s.split();s.replace();s.toUpperCase();等等。

ES5中,可以把字符串当做只读的数组来访问,如:s[0];s[2];//但是这种方式不是所有的浏览器都兼容,比如IE就不行。

4、模式匹配,JavaScript用包含在两个字符//之间的一串字符表示一个模式匹配,在第二个/字符后还可以跟其他的字符来进一步表示模式的行为。可以在js中直接使用,如

var pattern=/\d+/g;//匹配数字

var text="testing:1,2,3";

pattern.test(text);//true

text.search(pattern);//返回第一个匹配的位置

text.match(pattern);//返回所有匹配结果的数组。

四、Boolean

1、有两个值:true,false。

2、类型转换:null,undefined,NaN,"",0,-0转换成boolean后值为false,其他所有的值转换为boolean后,值为true。

五、null和undefined

1、null,是JS的一个关键字,表示变量为空,缺少值。typeof(null) 返回的是一个object,表示null是一个对象。

2、undefined,是JS预先定义的一个全局变量,表示值未定义,缺少值,但是和null不同,typeof(undefined)返回的是undefined.

如果访问一个未初始化的变量,不存在的数组元素(越界)或者对象属性,返回的是undefined。

没有返回值函数的值返回的也是undefined。调用函数时,没有给函数的参数提供值时,此参数的值为undefined.

3、虽然null和undefined不同,但是都可以表示缺少值,所以null==undefined返回true,用严格相等运算符返回false:null===undefined

六、全局对象(global object)

全局对象在JS解释器启动或者浏览器加载一个新的页面时创建并初始化的,初始化后的全局对象包含一些有用的全局变量,函数,对象,其他JS代码可以使用。

变量包括:undefined,Infinity,NaN。

函数包括:parseInt,parseFloat,eval,isNaN。

构造函数包括:RegExp(),Date(),String(),Object(),Array();

对象包括:Math,JSON

在JS顶级代码中(不在JS函数中的代码)可以通过语句var global=this;来引用全局对象。

其实,用户自定义的全局变量也是作为一个属于保存在全局对象中。

在客户端JS(浏览器JS)中,一般有个Window对象来表示这个全局对象。

七、包装对象

string,boolean,number这三种原始类型(primitive)有对应的包装对象,String,Boolean,Number,所以可以在这些类型的对象上使用方法。

var s="Good";//typeof(s) returns string

var S=new String(s);//typeof(S) returns object

s==S;//return true;

s===S;//return false;

八、不可变的原始类型和可变的对象类型

5种原始类型:null,undefined,number,string,boolean是不可改变的。原始类型的数据的比较是按值比较的,只要值相等,他们就相等。

对象类型:array,object,function。对象类型的比较不是按值比较的,也就是说,两个数组有相同的元素,他们不一定相等。两个对象有相同的属性也不一定相等。和Java中的引用类型相似。

 

 

 

 

posted on 2013-09-23 11:57  leungrs  阅读(561)  评论(0编辑  收藏  举报