JavaScript是一种基于客户端浏览器的,面向对象的,事件驱动式的脚本语言,跨平台,它的脚本是动态解释执行的
Javascript的主要环境是各种浏览器,通常将javascript嵌入互联网页中,由浏览器负责解释执行,主要功能:动态修改HTML页面内容,包括创建,删除HTML页面元素,修改HTML页面元素的内容,外观,大小,位置等
因为javaScript由网站服务器开发,供用户下载到客户端执行,因此javaScript通常由如下两个限制:
1. javascript不能访问客户机的本地磁盘系统
2. javascript不能打开客户机上的网络连接
javascript与java的区别:
1. java是Sun公司推出的面向对象的程序设计语言;javascript是netscape公司的产品,其目的是为了扩展Netscape浏览器的功能,javascript是一种可以嵌入web页面中的解释性语言。
2. java是面向对象的程序设计语言,即使是开发简单的程序也必须从类定义开始,javascript是基于对象的,本身提供了非常丰富的内部对象供设计人员使用,java语言的最小程序单位是类定义,而javascript中则充斥了大量的函数
3. 两种语言的执行方式完全不同,java语言必须先经过编译生成字节码,然后由java虚拟机运行这些字节码,javascript是一种脚本语言,其源代码无需经过编译,由浏览器解释执行
4. 两种语言的变量声明也不一样,java采用强类型变量语言,所有变量必须先经过声明才可以使用,javascript是弱类型变量语言,其变量在使用前无需声明,而由解释器在运行时检查其数据类型
5. 代码格式不一样,java的代码是一种与HTML无关的格式,必须通过像HTMl中一样外媒体那样进行装载,其代码以字节码的形式保存在独立的文档中,javascript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。
Javascript由Netcape公司开发,Jscript由Microsoft公司开发,都是为了扩充浏览器的功能而开发的脚本语言ECMAScript是一种国际标准化的javaScript版本,现在主流浏览器都支持这种版本
虽然javascript,jscript和ECMAScript三种脚本语言基本差不多,但具体的细节存在不少的差异,编程时应尽量避免使用浏览器特定的功能,最好遵循ECMAScript标准,可以保证兼容性
运行javascript:通常嵌在互联网页中执行
1. 使用javascript:前缀构建执行javascript代码的URL
2. 使用<script…/>元素来包含javascript代码
<body>
<a href=”javascript:alert(“运行javasc”);” >运行javascript</a>
<script type=”text/javascript”>
Alert(“直接运行javascript);
</script>
</body>
数据类型和变量:
1. 显示定义;使用var关键字定义变量
2. 隐式定义:直接给变量赋值的方式
Javascript变量是区分大小写的,因此变量abc和Abc是两个不同的变量,允许一次定义多个变量:var a,b,c;可以在定义变量时为变量指定初始值:var a,b=0,c=0;
类型转化:
自动类型转化:
1. 对于减号运算符,因为字符串不支持减法运算,所以系统会自动将字符串转换成数值
2. 对于加法运算,因为字符串可用加号作为连接运算符,所以系统自动将数值转化为字符串,并对两个字符串进行连接运算
强制类型转换:有时候希望让字符串和数值执行加法运算,就需要使用强制类型转换
toString():将布尔值,数值等转换成字符串
parseInt():将字符串,布尔值等转换成整数
parseFloat();将字符串,布尔值等转化成浮点数
使用parseInt()或parseFloat()将各种类型变量转换成数值类型的结果如下:
字符串值:如果字符串是一个数值字符串,则可以转换成一个数值,否则将转换成NaN。
Undefined,null,布尔值及其他对象:一律转换成NaN
使用toString()函数将各种类型值向字符串转换的结果全是object
变量:
Javascript是弱类型的语言,同一个变量可以一会是数值,一会是字符串
与java,C等语言不同的是,javascript语言没有块范围
<script>
Function test(o)
{
//定义变量i,变量i的作用范围是整个函数
Var i =0;
If(typeof 0==”object”){
//定义变量J ,变量J的作用范围是整个函数内,而不是if块内
Var j=5;
For(var k=0;k<10;k++)
{
//因为javascript没有代码块范围所以k的作用范围是整个函数内,而不是循环体内
Document.write(k);
}
//即使出了循环体,k的值依然存在
Alert(k+”\n”+j);
}
Test(document);
</script>
Javascript的变量没有块范围,因此有可能出现一些非常奇怪的结果
<script>
//定义全局变量
Var scope=”全局变量”;
Function test()
{
//因为全局变量被局部变量覆盖,而此时scope局部变量尚未赋值,故此处输出undefined
Document.writeln(scope +<br />);
//定义局部变量scope,其作用范围为整个函数内
Var scope=”局部变量”;
//再次输出scope的值
Document.writeln(scope+”<br />”);
}
Test();
</script>
代码第一次输出地scope值并不是”全局变量”,而是undefined.这是因为全局变量scope在test函数中已经被覆盖,局部变量scope在test函数中将全局有效,但此处scope还为被赋值,故此处输出undefined
变量的作用范围对于执行HTML事件处理时一样有效
基本数据类型:
Javascript是弱类型的脚本语言,声明变量时无需指定变量的数据类型,javascript变量的数据类型是解释时动态决定的,但javascript的变量保存在内存中时也有数据类型,基本数据类型有5种:
1. 数值类型:整数和浮点数
2. 布尔类型:只有true和false
3. 字符串类型:字符串变量必须以引号括起来,单引号或双引号
4. Undefined类型:专门用来确定一个已经创建但是没有初值得变量
5. Null:用于表示某个变量的值为空
1. 数值类型:
与强类型语言如java,C 不同,javascript的数值类型不仅包括所有的整型变量也包括所有的浮点型变量,javascript语言中的数值都以IEEE 754-1985双精度浮点格式数格式保存,javascript中的数值形式可以非常丰富,完全支持科学计数法表示,科学技术发的格式:
数字1E数字2
这种形式的值为:数字1*10数字2. E为间隔符号,不区分大小写
a = 5E (5*(10的一次方))
如果数值只有小数部分,则可以省略整数部分的0.但小数点不能省略
数值直接量不要以0开始,因为javascript不仅支持十进制数,还支持其他进制的数,八进制和十六进制数都以0开始
十六进制数以0X或0x开始,9以上的数以a-f表示,八进制的数以0开始,八进制数中只能出现0-7的数值
由于HTMl代码很多地方都需要使用十六进制数,因此十六进制数是非常有用的,八进制数并不是所有浏览器都能支持,如需要使用八进制数,请先确定代码运行的浏览器支持八进制数
当数值变量的值超出数值类型的表值范围时,将出现两个特殊值:Infinity(无穷大):表示数值大于数值类型的最大值和-infinity(负无穷大):变量值小于数值变量的最小值
Infinity,-Infinity与其他数值进行算术运算时,整个算术表达式将变成另一个特殊值:NaN,但Infinity,-Infinity都可以执行比较运算即Infinity=Infinity 而-Infinity=-Infinity
Javascript中的算术运算符允许除数为0(除数和被除数也可同时为0得到结构为NaN),整数除0的结果为Infinity,负数除0的结果就是-Infinity
NaN是另一个特殊的数值,它是 Not a Number 三个单词的首字母缩写。表示非数。0除0,或者以Infinity执行算术运算都将产生NaN的结果,如果算术表示中有个NaN数值变量,整个算术表达式的值为NaN
NaN与Infinity 和-Infinity不同的是,NaN不会与任何数值变量相等,也就是说NaN==NaN也返回false,如何判断一个变量是否为NaN,javascript专门提供了isNaN()函数来判断某个变量是否为NaN isNaN()是javascript的内嵌函数,用于判断某个数值型变量是否为”非数”
Javascript提供一些简单的方法来访问这样特殊值,特殊值通过javascript的内嵌函类Number访问,访问方式如下:
Number.MAX_VALUE 数值型变量允许的最大值
Number.MIN_VALUE 数值型变量允许的最小值
Number.POSITIVE_INFINITY infinity(正无穷大)
Number.NEGATIVE_INFINITY –infinity(负无穷大)
Number.NaN NaN(非数)
浮点数:
关于浮点数必须注意精度问题,这种由于浮点数计算产生的问题,很多语言中都会出现,对于浮点数值得比较,尽量不要直接比较,推荐使用差值法:判断两个浮点型变量是否相等,可以计算两个浮点型变量的差值,只要差值小于一个足够小得数即可认为相等。
字符串类型:
Javascript的字符串类型必须以引号括起来,既可以是单引号,也可以是双引号
Javascript中没有字符类型,或者说字符类型和字符串类型是完全相同的。 即使:var a=’a’;这行代码定义的a依然是字符串类型的变量,没有字符类型变量。
Javascript中的字符串与java中字符串主要有两点区别:
1. javascript中字符串可以用单引号引起来
2. javascript中比较两个字符串的字符序列是否相等使用==即可,无需使用equals()方法
javascript以String内建类来表示字符串
String类有如下基本方法和属性可用于操作字符串:
String():类似于面向对象语言中的构造器,使用该方法可以构建一个字符串。
charCodeAt():返回字符串中特定索引处的字符所对应的Unicode值
fromCharCode():静态方法,直接通过String类调用该方法,将系列Unicode值转换成字符串
substring():返回字符串的某个子串。
Slice():返回字符串的某个子串,功能比substring更强大,支持负数参数
match(): 使用正则表达式搜索目标子字符串
search():使用正则表达式搜索目标子字符串
concat():用于将多个字符串拼接成一个字符串
indexOf(serchString [, startIndex]);搜索目标字符串searchString出现的位置,其中startIndex指定不搜索左边startIndex个字符(跳过).
lastIndexOf(searchingString[,startIndex]]);搜索目标字符串searchString最后一次出现的位置,如果字符串中没有包含目标字符串,则返回-1,功能更强大的搜索函数是search()函数,它使用正则表达式搜索。
Substring(start [,end]);从start(包括)索引处,截取到end(不包括)索引处,不截取end索引处的字符。如果没有end参数,将从start处一直截取到字符串尾。
Slice(start[,end]):与substring的功能基本一致,区别是slice可以接受负数作为索引,当使用负索引值时,表示从字符串的右边计算索引,即最右边的索引为-1
match和search 方法都支持使用正则表达式作为子串,match返回匹配的子字符串,而后者返回匹配的索引值。
Match支持使用全局匹配,通过使用g标志来表示全局匹配
Match方法返回所有匹配正则表达式的子串所组成的数组
Match方法的返回值为字符串数组或null,如果包含匹配值,将返回字符串数组,否则将返回null.
search方法的返回值为整型变量,如果搜索到匹配子串,则返回子串的索引值,否则返回-1
<script>
Var s= “abfd-abc@d.comcdefg>”;
a = s.search(/[a-z]+@d.[a-zA-Z]{2}m/);
var str=”1df2dfs3fg5”;
var b = str.match(/\d/g);
alert(a+”\n”+b);
</script>
从运行结果可以看出,a的值是6.这表明目标字符串中和正则表达式匹配的第一个子串的值为6,正则表达式匹配的子串是abc@d.com
Match 方法在正则表达式后增加了g选型,表明执行全局匹配,匹配的结果返回一个数组,数组元素是目标字符串中的所有数值
布尔类型:
true/false
undefined和null
undefined类型的值就只有undefined一个,该值用于表示某个变量不存在,或者没有为其分配值,也用于表示对象的属性不存在
null用于表示变量的值为空,undefined和null之间的差别比较微妙,undefined表示没有为变量设置值,而null表示将变量值设为空
很多时候undefined和null本身就相等,即null==undefined将返回true,如果要精确区分null和undefined应该使用精确等于符号===
定义一个变量后,如果没有为该变量赋值,则该变量的值默认为undefined,这个值是系统默认分配的,访问对象并不存在的属性时,该属性值也将返回undefined.
与null不同的是,undefined并不是javascript中的保留字,在ECMAScript3标准规范中,undefined是一个全局变量,其值就是undefined,在这种情况下,把undefined当成关键字处理即可,某些浏览器可能不支持undefined值,此时可以在javascipt脚本的第一行定义如下变量:var undefined;
复合类型:
复合类型是由多个基本数据类型(也可以包含复合类型)组成的数据体:
Object:对象
Array:数组
Function:函数
对象:是一系列命名变量和函数的集合,其中命名变量的类型可以是基本数据类型,也可以是复合类型,对象中的命名变量称为属性,而对象中的函数称为方法,对象访问属性和方法通过”.”
//判断浏览器的版本:
Alert(navigator.appVersion);
Javascript是基于对象的脚本语言,提供了大量的内置对象供用户使用,除了Object之外,还提供了如下常用的内置类:
Array:数组类,Date:日期类,Error:错误类,Function:函数类,Math:数学类 Number:数值类,Object:对象类 ,String:字符串类
数组:数组时一系列的变量,数组索引从0开始
定义数组三种方式:var a=[1,2,3]; var b=[]; var c= new Array();
Javascript作为动态弱类型语言,其数组有如下特征:
Javascript的数组长度可变
同一个数组里的元素的类型可以互不相同
访问数组元素时,不会产生数组越界。访问未赋值的数组元素时,该元素的值为undefined
函数:函数是javascript中另一种复合类型
Typeof:该运算符用于返回变量的数据类型
Javascript中的函数与java中的方法区别
Javascript中的函数无需声明返回值类型
Javascript函数无需声明形参类型
Javascript中函数可以独立存在,无需属于任何类
Javascript函数必须使用funtion关键字定义