该部分为基础部分
1、数据类型
基本数据类型:数字、文本字符串和布尔值,null和undefined。
复合数据类型:object ---------值的集合。
object: 已命名的值的无序集合;有编号的值的有序集合(即数组)
数组(通常把它和对象看做不同的类型)。
function
专用对象:
Date类:表示日期的对象
RegExp类:表示正则表达式的对象(模式匹配工具)
Error类:表示javascript程序中发生的语法错误和运行时错误的对象
2、数字
和其他程序设计语言不同之处:不区别整型数值和浮点型数值。
JavaScript中所有的数字都是浮点型。
采用IEEE754标准定义的64位浮点格式表示数字。
最大值:(正负)1.7976931348623157*10^308
最小值:(正负)5*10^(-324)
注:当一个数字直接出现在JavaScript程序中,我们称其为数值直接量(numeric literal)。
在任何数值直接量前加负号(-)可以构成它的负数,但是负号不是数值直接量语法的一部 分,它是一元求反运算符。
数值直接量的几种形式:
整型
八进制(不一定支持ECMAScript标准不支持)和十六进制
浮点型
使用:通过语言自身提供的算术运算符来进行数字运算。
以及算术函数。(这些函数被保存为Math对象的属性,可以使用直接量名Math来访问)
eg.计算数字的平方根
hypot = Math.sqrt(x*x + y*y);
数值转换:数字格式化为字符串;字符串解析为数值。
特殊的数值:Infinity:正无穷大
-Infinity:负无穷大
NaN:非数字 (当一个算术运算产生了未定义的结果或错误时返回的数值)
eg. 0/0
该数值和任何数值都不相等,包括它自己,故要用isNaN()来检测该值
isFinite()用来检测一个数字是否是NaN、正无穷大和负无穷大。
特殊数值的常量:(没有列出来)
3、字符串
和C以及C++、Java不同:没有char。要表示单个字符,必须使用长度为1的字符串。
字符串直接量:必须写在一行中,如果将它们放在两行中,可能会将它们截断。如果必须在字符串直接量中添加一个换行符,可以使用字符序列\n。
如果文本编辑器不支持完整的Unicode紫斧子,可以采用转义序列把Unicode字符添加到字符串直接量中。
如果使用单引号来界定字符串,则要留意英文的缩写和所有格,可以使用反斜线负号(\)来转义带有单引号的字符串中出现的撇号。
在同时使用JavaScript和HTML时,最好对JavaScript采用一种引用方式,对HTML采用另一种引用方式。
eg.<a href="" οnclick="alert('Thank you')">Click Me</a>
字符串直接量中的转义序列(没有列出来)
注:不能在换行符前用反斜线转义符使字符串标记跨两行或在字符串中包含一个换行直接量。如果\位于表中所示的字符之外的字符前,则忽略\。
字符串的使用。
javascript的字符串和javascript数组一样,都是以0为开始索引的。
注:字符串是一种很独特的JavaScript数据类型,虽然它们使用对象访问属性和方法的语法,但是它们自身并非对象。
把数字转换为字符串
数字会在需要的时候自动转换为字符串。
eg.如果一个数字用在一个字符串连接表达式中,数字就会先转换为字符串。
从而,要把一个数字转换为字符串,只要给它添加一个空的字符串即可。
显示转换:String(); eg.var stringvalue=String(number);
或toString(); eg.string_value = nuber.toString();
tostring()方法有可选的参数,该参数用来指定转换的基数。如果不指定这个参数,转换会以10为基数进行。也可按照其他的基数来转换数字。
toFixed()方法把一个数字转换为字符串,并且显示小数点后的指定的位数。它不使用指数表示法。
toExponential()使用指数表示法把一个数字转换为字符串,小数点前面有1位数,而小数点后有指定的位数。
toPrecision()使用指定的有意义的位数来显示一个数字,如果有意义的位数还不够显示数字的整个整数部分,它就是用指数表示法。
最后这三个方法都会对结果字符串进行适当的四舍五入。
把字符串转换为数字
当一个字符串用于数字环境中它会自动地转换为一个数字。
故,只要把一个字符串减去0就可以将其转换为一个数字。
(注:给一个字符串值增加一个0会导致字符串连接)
其他方法:Number(); eg.var number = Number(string_value);只对以10为技术的数字有效。
parseInt() 只截取整数;若一个字符串以“0x”或“0X”开头,将会被解释为一个十六进制的数字。且,可以接受另一个参数来指定要解析的数字的基数。若一个字符串以“0”开头,则可能解释为八进制或者十进制,带有不确定性,故,最好不要用parseInt()去解析。
parseFloat() 截取整数和浮点数
若这两个方法不能把指定的字符串转换为数字,它们就会返回NaN。
4、布尔值
true & false
布尔类型转换:
一个布尔值用在数值环境中:ture----1; false---0;
一个布尔值用在字符串环境中:ture---"ture"; false---"false";
数字到布尔值:0或NaN----false; else---true;
字符串到布尔值:空字符串---false; else---true;
空值或未定义的值---false;任何非空对象、数组或函数----true;
显示转换为布尔值:Boolean(); eg. var x_as_boolean = Boolean(x);
或使用布尔非运算符两次: var x_as_boolean = !!x;
5、函数
javascript中的函数是真正的数值,可以被存储在变量、数组和对象中,而且还可以作为参数传递给其他函数。
函数直接量: 看起来像是个函数定义,只不过没有函数名。
eg. 若用函数定义来定义函数square():
function square(x) { return x*x}
还可以用函数直接量来定义:
var square = function(x) { return x*x; }
还有一种,把参数列表和函数体作为字符串传递给构造函数Function()。
eg. var squre = new Function("x", "return x*x"); (此法效率不高)
如果一个函数值是存储在某个对象的属性中的,那么那个函数通常被称为if昂发,属性名也就变成了方法名。
6、对象
可以用一般的方法;
又javascript中的对象可以作为关联数组使用,因为它们能够将任意的数据值和任意的字符串关联起来。则,访问对象的属性可以这样:
eg. image["width"]
创建对象
对象直接量(对象初始化程序):由一个列表构成
eg. var point = {x:2.3, y:-1.2};
还可:var squqre = {"upperLeft":{x:point.x, y:point.y},
'lowerRigth':{x: (point.x+side), y:(point.y+side)}};
注:对象直接量中使用的属性值不必是常量,可以是任意的表达式;
对象直接量中的属性名可以是字符串而不是标识符。
对象转换
非空对象-----布尔环境:ture
------字符串:调用toString()
------数字环境:调用valueOf()
7、数组
不支持多维数组,不过它的数组元素可以是数组。
且,数组元素不必具有相同的类型(因javascript是一种非类型语言)。
创建:使用构造函数Array()
可以先创建,再初始化;也可创建的同时初始化
若只想Array()传递一个参数,则为数组的长度。
数组直接量
8、null
独一无二的值。若某个变量的值为null,则说明它的值不是有效的对象、数字、字符串和布尔值。
null:布尔环境:false
数字环境:0
字符串环境:"null"
9、undefined
使用一个并未声明的变量,或者使用已经声明但是还没有赋值的变量,又或者使用了一个并不存在的对象属性是,返回的值。
不同于null。但是==运算符将两者看做相等。
若想区分,则用===或typeof
undefined:布尔环境:false;
数字环境:NaN;
字符串换将:"undefined"
10、Date对象
11、正则表达式(RegExp对象)
与Date对象不同,RegExp对象有一个直接量语法,可以被直接编码到javascript程序中。