JavaScript
JS为网页添加功能:
1、页面的动态效果:输入的验证、页面元素的动态显示等
javascript写在html页面上,由浏览器来运行
2、服务器的交互:数据的交换--jsp、ajax
jquery--封装好js方法
一、概述
1、什么是Javascript?
网页编程技术,用来向HTML页面添加交互行为
JS是一种基于对象和事件驱动的解释性脚本语言,具有与java和C语言相类似的语法
特点:直接嵌入HTML页面;由浏览器解释执行代码,不进行预编译
功能:用于客户端数据的计算
客户端表单的合法验证
浏览器事件的触发
网页特殊显示效果制作
2、发展史
JavaScript正是名称是ECMAScript,此标准由ECMA组织发展和维护
ECMA-262是正式的JavaScript
此标准基于JavaScript(Netscape)和JScript(Microsoft)
-网景公司在Netscape2.0首先推出了JavaScript
-微软公司在IE3.0开始提供对客户端JavaScript的支持,并取名为JScript
二、基础语法
1、写法:
<1>在元素内部和事件绑定在一起<input type="button" value="按钮" onclick="alert(‘hello java‘)">
<2>在head标签中封装在<script language="javascript"><script>中,加语言是告知浏览器 如果不写则使用浏览器默认设置的方式
<3>封装在JS文件中 调用时<script language="javascript" src="MyScript.js"><script> 注:W3C推荐使用type=text/javascrpt
2、错误查看方式:FireFox错误控制台
注意:单行注释//多行注释/* */;语句由表达式、关键字、运算符组成;大小写敏感;分号结束
3、变量
<1>变量的声明:var x=0;var y="hello";var z="true" 变量在声明时不确定数据类型,赋值时确定数据类型 js是一种弱类型的编程语言
4、数据类型
<1>基本类型:number/String/Boolean
String:由Unnicode字符、数字、标点组成的序列
由单引号或双引号括起--两种都可以使用,但如果外层是双引号,内层就用单引号因为便于区分
特殊字符需要转义符\,如\n,\\,\‘,\"
怎么表示汉字的范围只能是中文则必须用Unicode:[\u4e00-\u9fa5]
Number:不区分整型和浮点型数值
所有的数字都采用64位浮点格式存储,类似于double格式
a、整型
10进制的整数由数字的序列组成
16进制数据前面加上0X,八进制前面加0
b、浮点型
使用小数点记录数据:3.4
使用科学计数法记录数据:4.3e23
C、boolean:多用于控制语句
数据类型的转换:
隐式转换:直接转--默认规则
规则:Number+String=String
Number+Boolan=String true变1 false变2 运算
Boolean+String=String true/false转变为字符串类型的true/false
Boolean+Boolean=Number 值为数字0/1
显式转换:利用转换的函数方法--当有确定的计算要求
规则:a、toString
b、parseInt()
c、parseFloat()
默认从控制台输入的数据类型为字符串类型
d、isNaN()--判断是不是一个数字 很常用
typeof:判断数据的类型
<2>特殊类型:Null--空/Undefine--未定义
<3>复杂类型
5、运算符:算术、逻辑、关系...
<1>关系运算符 注意===严格相等和==的区别
===是指值和类型都相等
6、流程控制:
三、常用内置对象
什么是js对象?
js是一种基于对象的语言
对象是js中最重要的元素
js中包含多种对象:内置对象、自定义对象、浏览器对象、HTML DOM对象、Active对象
1、简单数据对象
String:
<1>创建字符串对象:var str1="hello world";var str2=new String("hello world");
<2>String对象的属性:length alert(str1.length);
<3>String对象的方法:
toLowerCase()/toUpperCase() 大小写转换
indexOf()/lastIndexOf() 找某个子字符的位置--从前往后找/找某个字符的位置--从后往前找
subString(star,end) 截取字符串,不含end本身位置
charAt(index) 返回指定下标的字符串
charCodeAt(index) 返回字符串unicode编码
replace(原字符,新字符) 只能替换一次
split() 拆分字符串 返回一个数组
操作:模拟过滤敏感字符
function replaceString(){ //先获取字符串 var str1=document.getElementById("txtString").value var index=str1.indexOf("js");//设置初始值 while(index>-1){//如果有敏感字符 str1=str1.replace("js","*");//找到了将敏感字符替换掉 index=str1.indexOf("js");//在新的字符串中继续找是否存在有敏感字符js,相当于迭代操作 } document.getElementById("txtString").value=str1 }
过滤敏感字符的方法:<input type="text" onblur="replaceString()" id="txtString" />
Number:基本类型数据的包装对象
方法:toString():数值转换为字符串
tofixed():数值转换为字符串,参数为指定保留的小数位数,四舍五入,不满足保留位数,补0
如var data=53.2-->data.toFixed(2)-->53.20 常用于小数的格式化
Boolean:
2、组合对象
Array:1列多个数据 js中没有集合只有数组 不需要声明初始长度直接用
<1>写法:
方式一 ar arr=new Array();//先声明 未初始化
arr[0]="marry" arr[1]=true
方式二 var arr=new Array("mary",10,true)声明+初始化
方式三 var arr=["mary",10,true] 简写 省略new Array
<2>属性:length获取元素个数/数组长度
<3>数组方法:
arr.toString()---用于遍历数组,输出数组 如10,20,21..默认是用逗号隔开的 注意是无参的
arr.join("*") ---指定分割符*输出数组10*20*30
arr.concat(value1,value2,...) 拼接数组 在原数组后面连接 得到新数组 原数组值不发生改变
arr.slice(start,end)--获取子数组/截取数组 不含end位置的数组
arr.reverse()--数组的反转
arr.sort()--排序 默认是按字符顺序排序
如果要实现按数值排序则要自定义个方法:
function arrayFunc(a,b){
return a-b;
}
array.sort(arrayFunc)将方法对象当做参数传入
Math:数学计算相关的--不用创建对象 直接使用 类似于静态对象
<1>常用属性:都是数学常数
Math.E--自然数
Math.PI--圆周率
Math.LN2(in2)
Math.LN10(in10)...
<2>方法(了解)
三角函数 Math.sin(x) Math.cos(x)...
反三角函数 Math.asin(x) Math.acos(x)..
计算函数 Math.sqrt(x) Math.log(x)..
数值比较函数 Math.abs(x) Math.max(x,yxz..)...
注意其中的:Math.random()--0<=Math.random()<1 小数
Math.floor()--返回一个小于或等于指定数字的整数,也就是说往下取
Math.ceil()--正好相反 往上取整
案列:求3-9之间的随机整数 var s=(Math.random())*6+3--> Math.floor(s)
可以应用在网页上某也图片的随机出现的位置,坐标生成随机数
Date:对象
<1>创建对象:
var d=new Date();//当前日期和时间
var d=new Date(2013/01/01 12:12:12);//固定日期和时间
<2>方 法:
分类:getxxx
getDay/getDate/getMonth/getFullYear...
setxxx
setDay/setDate...
toxxx--得到字符串格式的表示方法 常用于页面显示
toString
3、高级对象:
Function:函数(方法)是一组可以随时随地的运行的语句 function对象可以表示开发者的任何函数 函数实际上是功能完整的对象
定义:略
调用:
Arguments对象:
a、js中没有传统意义上的重载(方法名相同,参数列表不同),如果方法名称相同,则以最后一次定义为标准
b、js如果要实现类似重载的效果使用关键字arguments 代表当前被传入的参数,组成了一个数组
function m(){alert(arguments[0])}
//方法的重载: function testMethod(){ if(arguments.length==1){ var data=arguments[0]; alert(data*data); } else if(arguments.length==2){ alert(arguments[0]+arguments[1]); } }
创建方法:
方式一:function关键字function s(参数){方法体}--推荐
用于跟功能相关的方法
方式二: var f =new Function("a","b","alert(a+b);");--不推荐使用
最后一个参数是方法体,前面的其他参数是是方法的参数
存在的需求:有些方法不需要显式存在,只是为其他方法单独使用
function arraySort(){ var array=[12,34,56,11,7]; var f=new Function("a","b","return a-b;")//专门用于按数值排序所用 array.sort(f); alert(array.toString()); }
//方式三:
var f =new Function(a,b){ return a-b;//使用匿名函数 }
全局函数:所有的JS对象都可以使用
parseInt/parseFloat/isNaN...
encodeURI():把字符串作为URI进行编码
decodeURI():对encodeURI()函数编码过的URI进行解码
eval:计算 var s1="1+3*5";var r =eval(s1);alert(r);//16
计算某个字符串,以得到结果;或者执行其中的js代码
RegExp:纯文本的表达式,表示某种匹配模式 在不同的语言环境下,执行后者使用正则表达式,实现文本的各种处理
eplace(原字符,新字符);
match()--得到匹配的结果 用数组存
search()--得到匹配的下标 可以判断是否有敏感字符
匹配模式:g--global 全局
m--multilin 多行
i--ignorance 忽略大小写
实际应用:str1=str1.replace(/js/gi,"*") //全局替换 忽略大小写
str1=str1.replace(/\d/g,"*") //\d表示一个数字如果表示1个或多个数字则用/\d+/
正则表达式的应用分为两类:
一类:和String对象的三个方法结合使用,实现对String的操作
二类:正则表达式对象
var r =/\d{6}/ --6位小数
var s=/^[a-z]{3,5}$/ 意思是a-z 3-5位 从开始到结束进行匹配
r.test(String)--true/false 意思是指定范围是否与录入的数据匹配 --特别适合输入验证
验证汉字:/^[\u4e00-\u9fa5]{3}$/ 3个汉字
四、应用(重要)
DHML--动态效果 比如浏览器浏览信息、屏幕信息等
将整个窗口均实现对象化,结构如下:
window 父对象
document---html
screen
history
location
event
navigator
1、window对象:
<1>打开对话框窗口:alert();是一种阻塞线程的方法 window.alert("你好");
window.confirm("请确认")--确认询问窗口 信息提示框--返回boolean
了解window.prompt("请输入:")--弹出一个输入的文本框 很少使用 无法对文本框的样式修改、控制
<2>打开新窗口: 一个参数 window.open(url);--window.open("http://www.baidu.com");重复打开
两个参数 window.open(url,"windowName")给窗口取了名字 再次点击就不会重复打开了
三个参数 window.open(url,"windowName",conf)最后一个参数为浏览器外观设置 如宽高等...