JavaScript是弱类型脚本语言,在声明变量是无需指定数据类型,他的类型由JavaScript动态决定
在JavaScript中,基本数据类型有一家五个
- 数值类型:包含整数Int等和浮点数Float等
- 布尔类型:只有true和false两个值
- 字符串类型:定义时用引号括起来,无论是单引号还是双引号
- undefined类型:用来确定,表示一个已经创建,但是还没有初值的变量
- null类型:用于表示某个变量的值为空
数值类型
由于JavaScript中数值类型包含整形和浮点数,所 以数值类型的形式非常丰富,可整数可小数,也可以表达科学计数法,如3.14e2,3.14E2都可以表达为3.14乘以10的2次方,(间隔符E不区分大小写),且如果整数部分为0,只有小数部分,则小数点前的0也可省略,即 0.14e2表示为 .14e2
数值类型除了支持20进制,同时也支持16进制和8进制,
- 16进制以0X或者0x开头,如0X151,0xafff,(9以上的数用a~f表示)
- 8进制以0开头,只能出现0~7的数值,如014,026(所以在定义十进制数时,前面千万不要多写0,会被认定成0进制数而出现错误)
数值类型表述范围问题
由于数值类型都有范围,所以不要定义或在使用中让存储的值超出其表示范围,如果超出,将会出现两个特殊值:Infinity(正无穷)和-Infinity(负无穷),前者表示数值大鱼数值类型的最大值了,后者表示数值小于数值类型的最小值了
在出现超出范围的情况后,值将变成Infinity(-Infinity),此后即便将值减小到(增大到)数值类型所能表示的范围,Infinity(-Infinity)也不会改变,所以只要两个值变成了Infinity,不管他实际值应当是什么,他们此时的值都是相等的。
例
<script type = "text/javascript">
var a = 3e30000;
var b = 8e80000;
</script>
虽然不考虑数值存储范围,两个值明显不等,但是他们此时超过表达范围,他们抛去了实际值都变成了Infinity,所以在判定时,a与b是相等的
与此同时,由于正负无穷的存在,JavaScript的算术运算允许除数为0的计算,整数除0得到Infinity,负数除0得到-Infinity,若计算0除0,则又会得到另一个值:NaN
NaN意为Not a Number,即表示非数,0除0,无穷大除无穷大,都会得到NaN,只要算术表达式中有一个NaN的值,计算得到的值就为NaN
NaN不与任何数值相等,这是它与Infinity的区别(NaN不等于NaN),若想判定某个变量是否为NaN,JavaScript提供了专门函数isNaN()来判定,若括号内的值为NaN,则返回true
JavaScript也提供了一些简单的方法访问这些特殊值,特殊值通过JavaScript的内嵌类Number访问
浮点数精度问题
<script type = "text/javascript">
var a = .6666;
var b = a * 5 ;
var c = 3.333;
alert(b + "\n" + c);
</script>
在上面的代码中,a*5理论值为3.333,但实际并不是
可以发现,在计算中出现了精度丢失,这在编程语言中经常出现,虽然丢失的数非常之小,但是这个问题会很大的影响两个浮点数比较问题,这个问题的解决在各种语言里有一个通用的方法——差值比较:
丢失的值很小,所以在比较时,让上述程序中的b减去c,如果得到的数小于一个足够小的数,就可以认为两个数相等
<script type = "text/javascript">
var a = .6666;
var b = a * 5 ;
var c = 3.333;
document.writeln(b + "\n" + c);
if(b - c <= 0.5e-5){
document.writeln("b和c相等!");
}
</script>
字符串类型
JavaScript的字符串必须用引号括起来,单双引号都可,并且JavaScript中没有字符类型,所以即使
<script type = "text/javascript">
var a = 'a';
</script>
定义了单个字符,但JavaScript也将其视为字符串
字符串String的一些操作
JavaScript中的字符串较为复杂,String类包含了很多操作字符串的方法
- String( ):类似于面向对象语言中的构造器,使用该方法可以构建一个字符串。
- charAt( ):获取字符串特定索引处的字符。(索引从0开始,如索引4代表第5个字符)
- charCodeAt( ):返回字符串中特定索引处的字符所对应的Unicode值。(计算机科学领域里的一项业界标准,包括字符集、编码方案等)
- x.length:属性,直接返回字符串x的长度。JavaScript 中的中文字符算一个字符。
- toUpperCase( ):将字符串的所有字母转换成大写字母。
- toLowerCase( ):将字符串的所有字母转换成小写字母。
- fromCharCode( ):静态方法,直接通过String类调用该方法,将一系列Unicode值转换成字符串
- indexOf( );返回字符串中特定字符串第一次出现的位 置。
- lastIndexOf( ):返回字符串中特定字符串最后一次出现的位置。
- substring( ): 返回字符串的某个子串。
- slice( ):返回字符串的某个子串,功能比substring更强大,支持负数参数。
- match( );使用正则表达式搜索目标子字符串。
- search( ):使用正则表达式搜索目标子字符串。
- concat( ):用于将多个字符串拼加成-一个字符串。
- split( ):将某个字符串分隔成多个字符串,可以指定分隔符。
- replace( ):将字符串中某个子串以特定字符串替代。
上述方法中,如length,indexOf,lastIndexOf( ),substring( ),slice( ),match( )等等作用为“搜索”,“获取”的方法都不会改变字符串的实际值,他们需要用一个新的变量来输出、接住方法返回的值,如
<script type = "text/javascript">
var a = 'abc中国iloveyou';
var b = a.length;
var c = String.fromCharCode(97,98,99);
var d = a.indexOf("love");
var e = a.indexOf("o,10");
var f = a.lastIndexOf("o");
var g = a.slice(0,4);
var h = a.slice(3,-2);
document.writeln(a);
document.writeln(b);
document.writeln(c);
document.writeln(d);
document.writeln(e);
document.writeln(f);
document.writeln(g);
document.writeln(h);
</script>
布尔类型
布尔类型的值只有两个:true,flase。布尔类型的值通常是逻辑运算的街而过,或用于表示对象的某种状态,常常在if等判断语句的判定条件中出现。
undefined和null
undefined类型的值只有一个undefined,该值用于表示某个变量不存在,或者没有为其分配值,但也用于表示对象的属性不存在,
null用于表示变量的值为空,(注意,是代表变量有值,只是值为null)
上面两个值如果不进行精确比较,很多时候两个值都代表没有,即undefined==null的值为true,但是他们的类型毕竟不同,所以用精确等于符( === )时,undefined === null比较时会返回false。
正则表达式
正则表达式本质是一种特殊的字符串,这种特殊字符串允许使用“通配符”,所以一个正则表达式可以表达一批规律相同的普通字符串,所以可以说任意一个普通字符串也可算作一个特殊的正则表达式,只是该表达式值匹配该字符串。
JavaScript的正则表达式必须放在两条斜线之间,如/abc/,它只匹配值为“abc”的字符串
正则表达式支持的合法字符
正则表达式支持的通配符
正则表达式需要的特殊字符(频率修饰词)
结构上,正则表达式由这三部分组成
除此之外,正则表达式还支持()表示法,用()可以将一个表达式形成一个固定组,还可以用丨表示互斥,例
/((abc)|(efg))/ —— 匹配abc或efg
JavaScript提供了一个test()方法,用于判断改正则表达式是否匹配了某个字符串,
提供了一个replace()方法,用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
正则表达式使用的一些例子
<script type = "text/javascript">
var m = "abfd--abc@d.comcdefg";
var a = m.search(/[a-z]+@d. [a-zA-Z](2)m/);
var n = "1dfd2dfs3df5";
var b = n.match(/\d/g);
alert(a + "\n" + b);
</script>
a表示从s中匹配一个格式为(开头为小写字母,中间是‘@d.’,然后是两个不论大小写的字母,最后是m)的字符串,即为 abc@d.com,首字母a的索引为6,所以该式输出会得到一个6.
b表示查找n字符串中所有数字,最后的g表达执行全局匹配,即扩大搜索范围,运行后得到结果:1,2,3,5、
如果需要在字符串中使用单引号、双引号等特殊字符,则必须使用转义字符,JavaScript的转移字符是“\”
- \b:退格
- \t:制表位,表示空一个TAB空格
- \n:换行回车
- \v:垂直的制表符
- \r:回车
- ":双引号
- ':单引号
- \:反斜线
- \〇〇〇:使用八进制表示拉丁字母,〇〇〇表示一个3位的八进制整数,范围是000 ~ 377
- \xHH:使用十六进制数表达拉丁字母,JJ表示一个2为的十六进制整数,范围是00 ~ FF
- \uHHHH:使用十六进制(该数值指定该字符的Unicode值)表示的字符,HHHH表示一个4位的十六进制整数