现在的位置: 首页 > 综合 > 正文

javascript 详解1

2018年02月05日 ⁄ 综合 ⁄ 共 6756字 ⁄ 字号 评论关闭

 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关键字定义

 

抱歉!评论已关闭.