您的位置:首页 > Web前端 > JavaScript

JavaScript语法详解(三)__基本数据类型

2014-05-27 16:20 706 查看
JavaScript的基本数据类型有如下5个:

数值类型:包括整数和浮点数

布尔类型:只有true和false

字符串类型:必须用引号引起来,可以是单引号,也可以是双引号

undefined:专门用来确定一个已经创建,但是没有初始值的变量

null:用于表明某个元素的值为空

一.数值类型

JavaScript中的数值形式非常丰富,完全支持用科学计数法表示。

<script type="text/javascript">
//显示声明变量a,b
var a, b;
//给a,b使用科学计数法赋值
a = 5e2;
b = 1.23e-3;
//输出变量a的值
alert(a + "\n" + b);
</script>




JavaScript除了支持十进制外,也支持十六进制和八进制数。十六进制数以0x开头,八进制数以0开头(并非所有浏览器都支持八进制)。

<script type="text/javascript">
//显示声明变量a,b
var a,b;
//使用十六进制给a赋值
a = 0x13;
//使用八进制给b赋值
b = 014;
//输出变量a,b的值
alert(a + "\n" + b);
</script>




当数值变量的值超出其表述范围时,将出现两个特殊值:Infinity(正无穷大)和-Infinity(负无穷大)

<script type="text/javascript">
//定义x为最大的数值
var x = 1.7976931348623157e308;
//再次增加x的值
x = x + 1e292;
document.write(x);
</script>




Infinity(正无穷大)、-Infinity(负无穷大)与其他数值进行算术运算时,整个算术表达式将变成两一个特殊的值:NaN。但是Infinity(正无穷大)和-Infinity(负无穷大)都可以执行比较运算:两个Infinity总是相等的,而两个-Infinity也总是相等的。

<script type="text/javascript">

//定义x为最小的数值
var x = -1.7976931348623157e308;
//再次减小x的值
x = x -1e292;
document.write(x + "\n");

//-Infinity执行算术表达式值为NaN
document.write(x + 3e3000 + "\n");

//定义a为Infinity,b为-Infinity
a = Number.POSITIVE_INFINITY;
b = Number.NEGATIVE_INFINITY;

document.write(a + b + "\n");
//两个-Infinity总是相等
document.write(x == b + "\n");
</script>




注意:

JavaScript中的算术运算允许除数为0,正数除以0得Infinity,负数除以0得-Infinity,0除以0的NaN(非数)。算术表达式中有一个NaN,结果就为NaN。

NaN与Infinity和-Infinity的区别:NaN不会与任何数值变量相等,NaN=NaN也会返回false,JavaScript中提供了专门判断NaN的函数,isNaN().

关于浮点型,必须注意其精度的丢失问题。

<script type="text/javascript">

//定义x为最小的数值
var x = .3333;
//定义y为,并为其赋值x*5
var y = x * 5;

document.write(y);
</script>
输出:

1.6664999999999999 而不是理论上的1.6665

这种由于浮点运算产生的问题,在很多语言中都会出现。对于浮点数值的比较,尽量不要直接比较,推荐使用差值比较法——判断两个浮点数是否相等,通过判断两个浮点型变量的差值,只要差值小于一个足够小的数即可认为相等。

二.字符串类型

JavaScript 的字符串必须用引号括起来,此处的引号可以是单引号也可以是双引号。

a="Hello World";
b='Hello World';
a、b两个变量完全相等,JavaScript中没有字符类型。

注意:JavaScript和Java中的字符串主要区别

1)JavaScript中字符串可以用单引号引起来

2) javascript中比较两个字符串是否相等使用==即可,无需使用equals()。

Javascript以String内建类来表示字符串,String类里包含一系列方法和属来操作字符串。

String():类似于面向对象语言中的构造器,使用该方法创建一个字符串。

charAt():获取字符串特定索引处的字符

charCodeAt():返回字符串中特定索引处的字符所对应的Unicode值

length:属性,直接返回字符串长度。JavaScript中一个中文字符算一个字符。

toUpperCase():将字符串的所有字母转换成大写字母。

toLowerCase():将字符串的所有字母转换成小写字母。

fromCharCode():静态方法,直接通过String调用,将一系列Unicode值转换成字符串。

indexOf():返回字符串中特定字符串第一次出现的位置。

lastIndexOf():返回字符串中特定字符串最后一次出现的位置。

substring():返回字符串的某个子串。

slice():返回字符串的某个子串,功能比substring()更强大,支持负数。

match():使用正则表达式匹配目标子串

search():使用正则表达式搜素子串

concat():用于将多个字符串拼接成一个字符串

split():将某个字符串分割成多个字符串,可以指定分隔符

replace():将字符串中某个子串以特定的字符串代替。

例1:

<script type="text/javascript">
//定义字符串变量a
var a = "abc中国";
//获取a的长度
var b = a.length;
//将一系列Unicode值转化成字符串
var c = String.fromCharCode(97, 98, 99);
//输出a的长度,以及字符串a在索引4处的字符和相应的Unicode值
//以及c字符串变量的值
document.write(b + "\n" + a.charAt(4) + " " + a.charCodeAt(4) + "\n" + c);

</script>


输出:



indexOf(SearchString[,startIndex])

lastIndexOf(SearchString[,startIndex])

搜索不到返回-1.

<script type="text/javascript">
//定义字符串变量a
var a = "hellojavascript";
//搜索llo子串第一次出现的位置
var b = a.indexOf("llo");
//跳过左边三个字符,开始搜索llo子串第一次出现的位置
var c =a.indexOf("llo",3);
//搜索a子串最后一次出现的位置
var d = a.lastIndexOf("a");
//输出
document.write(b + "\n" + c + "\n" + d );

</script>


输出:2 -1 8

substring(start[,end]):从start开始,截取到end(不包括end),没有end参数,则截取start到串尾。

slice(start[,end]):与substring()功能基本一致,区别是slice()可以接受负数作为索引(-1即最右边的索引)

<script type="text/javascript">
//定义字符串变量a
var a = "abcdefg";
//取第一个到第五个的字符串
var b = a.slice(0, 4);
//取第三个到第5个的子串
var c = a.slice(2, 4);
//取第5个到串尾
var d = a.slice(4);
//取第4个到倒数第一个
var f = a.slice(3, -1);
//取第4个到倒数第二个
var g = a.slice(3, -2);
//取倒数第3个到倒数第2个
var h = a.slice(-3, -2);
document.write(b + "\n" + c + "\n" + d+"\n"+f+"\n"+g+"\n"+h )
</script>
输出:

abcd cd efg def de e

match()和search()都支持使用正则表达式作为子串,区别:前者返回匹配的子字符串,后者返回匹配的索引值。

match()支持使用全局匹配,通过g标志来表示全局匹配(返回所有,match()返回所有匹配正则表达式的子串所组成的数组,匹配不到返回null。

search()返回子串的索引值,匹配不到返回-1。

<script type="text/javascript">
//定义字符串变量a
var a = "--abc@d.comefg";
//从a中匹配正则表达式
var b = a.search(/[a-z]/);
var str = "1dfd2dfs3df5";
//查找字符串中所有单个数值
var c = str.match(/\d/g);
// 输出
document.write(b + "\n" + c)
</script>
输出:2 1,2,3,5

三.布尔类型

布尔类型的值只有两个:true和false。布尔类型的值通常是逻辑运算的结果,或者用于标示对象的某种状态。

四.undefined 和null

undefined 类型的值只有一个undefined,该值用于表示某个变量不存在,或者没有为其分配值,也用于表示对象的属性不存在。

null用于表示变量的属性值为空,undefined与null之间的差别比较微妙,undefined表示没有为变量设置值或属性不存在,null表示变量是有值的,只是其值为null

如果不进行精确比较,很多时候undefined 和null 本身就相等,即null==undefined 返回true

如果要精确区分null和undefined 应该考虑使用精确等于符(===)

<script type="text/javascript">
//声明变量x,y
var x, y = null;
//判断x的值是否为空
if (x === undefined) {
document.writeln("声明变量后默认值为undefined");
}
if (x === null) {
document.writeln("声明变量后默认值为null");
}
//判断x是否与y(其值为null)相等
if (x == y) {
document.writeln("x(undefined)==y(null)");
}
//精确判断x是否与y(其值为null)相等
if (x === y) {
document.writeln("x(undefined)===y(null)");
}
//测试一个并不存在的属性
if (String.abc === undefined) {
document.writeln("不存在的属性默认值为undefined");
}

</script>
输出:

声明变量后默认值为undefined

x(undefined)==y(null)

不存在的属性默认值为undefined
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: