二 基本数据类型
Javascript是弱类型脚本语言,声明变量时无须指定变量的数据类型。 Javascript变量的数据类型里是解释时动态决定的。但 Javascript的值保存在内存中时,也是有数据类型的, Javascript的基本数据类型有如下5个
①数值类型:包含整数或浮点数。
②布尔类型:只有true或 false两个值。
③字符串类型:字符串变量必须用引号括起来,引号可以是单引号,也可以是双引号。
④undefined类型:专门用来确定一个已经创建但是没有初值的变量。
⑤null类型:用于表明某个变量的值为空。
1、数值类型
① js的数值形式非常丰富,完全支持科学计数法。5.12e2 表示 5.12 乘以10的2次方。E为间隔符,不区分大小写。如果只有小数部分则可以省略整数部分的的0,但是小数点不能省略,如 .34e2
②js除了支持十进制外还支持八进制和十六进制,八进制以0开头,十六进制以0X或0x开头。
③当数值变量的值超出了其表数范围时,将出现两个特殊的值:Infinity(正无穷) 和 -Infinity(负无穷),前者表示数值超过数值类型的最大值,后者表示数值小于数值类型的最小值。
当Infinity 和-Infinity 进行算术运算时得到是 NaN。Infinity、-Infinity 和其他普通数值运算时得到的结果依然是无穷大。
Infinity和-Infinity 进行比较运算时,两个Infinity 和 两个-Infinity也总是相等的。
④JS中的算术运算允许除数为0(除数和被除数可以同时为0,得到的结果为NaN),正数除0的结果是Infinity ,负数除0的结果是-Infinity。
⑤NaN是另外一个特殊的值,它是Not a Number 的缩写。表示非数。0除0 ,或 Infinity 和-Infinity 进行算术运算 都将得到NaN的结果。如果算术表达式中有个NaN的变量,则整个算术表达式的值为NaN。
NaN与Infinity 和-Infinity 不同的是NaN 不会和任何一个数值变量相等。 也就是 NaN== NaN 是false。JS专门通过 isNaN() 来判断。
⑥关于浮点数必须注意其精度丢失的问题。
var a = .3333; var b = a * 5;
b的理论值为 1.6665。 实际的值为1.6664999999999999
这种由于浮点数计算产生的问题,在很多语言中都会出现。对于浮点数值的比较,尽量不要直接比较,例如直接比较b是否等于1.6665,将返回不相等。为了得到1.6665与b相等的结果,推荐使用差值比较法一一判断两个浮点型变量是否相等,通过判断两个浮点型变量的差值,只要差值小于一个足够小的数即可认为相等。
2、字符串类型
Javascript以 String内建类来表示字符串, String类里包含了一系列方法操作字符串, String类有如下基本方法和属性操作字符串。-String():类似于面向对象语言中的构造器,使用该方法可以构建一个字符串。
-charAt():获取字符串特定索引处的字符。
-charCodeAt():返回字符串中特定素引处的字符所对应的Unicode值。
-length:属性,直接返回字符串长度。 Javascript中的中文字得算一个字符。
-toUpperCase():将字符串的所有字母转换成大写字母。
-toLowerCase():将字符串的所有字母转换成小写字母。
-fromCharCode():静态方法,直接通过 String类调用该方法,将一系列 Unicode值转换成字符串。
-indexOf():返回字符串中特定字符串第一次出现的位置。
-lastIndexOf():返回字符串中特定字符串最后一次出现的位置。
-substring():返回字符串的某个子串
-slice():返回字符串的某个子串,功能比 substring更强大,支持负数参数。
-match():使用正则表达式搜索目标子字符串。
-concat():用于将多个字符串拼加成一个字符串。
-spit():将某个字符串分隔成多个字符串,可以指定分隔符。
-replace():将字符串中某个子串以特定字符串替代。
-search():使用正则表达式搜索目标子字符串
①JS的索引与Java字符串里字符索引类似。JS字符串的第一个字符的索引是0
②substring(start[,end]); 从start 索引处 截取到end(不包括) 索引处。end可以省略。如果没有 end 则截取到字符串尾
注意当end 比 start小时,就会变成从 end 处开始 到 start (不包括),不接收负数索引 当start 、end 小于 0 时 按 0 处理。
'12345678'.substring(3,-10); 结果为 '123'
'12345678'.substring(3,1); 结果为 '23'
③slice(start,[,end]); 与substring 基本一致,只是可以接受负数索引,当使用负数索引时,表示从字符串的右边开始
计算索引,即最右边的索引为-1;
'12345678'.slice(3,-1); 结果为 '4567'
注意当 负数索引的位置小于start时,截到的串是空的
3、undefined 和 null
undefined类型的值只有一个 undefined,该值用于表示某个变量不存在,或者没有为其分配值,也用于表示对象的属性不存在。 null用于表示变量的值为空。 undefined与nul之间的差别比较微妙,总体而言, undefined表示没有为变量设置值或属性不存在:而null表示变量是有值的,只是其值为 null但如果不进行精确比较,很多时候 undefined和mull本身就相等,即 null=undefined.返回true如果要精确区分nul和 undefined,应该考虑使用确等于符(===)
三、复合类型
1、对象
对象时一系列命名变量、函数的集合。其中命名变量的类型既可以是基本数据类型,也可以是复合类型。对象中的命名变量称为属性,而对象中的函数称为方法。对象访问属性和函数的方法是通过“.” 实现的。
2、数组
一、数组是一系列的变量。js中的数组元素类型可以不相同。
定义数组有三种语法:
① var a = [3,4,5];
② var b = [];
③ var c =new Array();
二、数组的特征
① js 数组的长度可以随意变化,它总是等于所有元素索引最大值 +1
② 同一数组中的元素可以互不相同
③ 访问数组元素时不会产生越界,访问未被赋值的元素时,值为undefined。
三、 js 的数组可以相当 java中的数组、list 集合
数组作为栈使用时,有如下两个方法。
① push(e) 元素入栈
② pop() 元素出栈
数组作为队列使用时
①unshift(e) 元素入队列
② shift() 元素出队列
四、 Array 对象的其他方法
①concat(value,...) 为数组添加一组元素,返回追加元素后的数组,但原数组未改变。
② join([separator]) 将数组的多个元素拼接在一起,组成字符串后返回。
③ reverse() 数组反转
④ slice(start[,end]) 截取数组在start和end 索引之间的子数组,如果start 和end 为正,则从 左边开始,为负从右边开始。但是原数组不会变。
3、函数
函数可以包含一段可执行性的代码,亦可以接受调用者传入的参数。在函数的声明中,参数列表不需要数据类型声明,返回值也不需要。
函数定义的语法格式:
function functionName (param1,param2,... )
{
}
函数的调用语法
functionName(param1,param2,... );