【JavaScript】JavaScript编程

JavaScript 编程

1).JavaScript - 基本语法、数据类型、运算符表达式、流程控制

目的:实现网页动态效果、用输入数据的格式校验,减轻服务器(Tomcat DB)校验数据的压力
介绍:①基于浏览器运行的面相对象的编程语言
②弱类型编程语言.[变量类型,引用类型只有一个 var。例如:var a = 1;]
(1)JavaScript基本语法
①javascript可以书写在*.html网页中。【浏览器运行javascript】
②代码基本格式:<script> JavaScript代码 </script> (一般放在head标签内、和body标签的底部)
③运行:
   	a. 浏览器打开网页,解析运行
    b. 运行方式: 解释型语言,直接浏览器解释执行
    c. 运行顺序: 自上而下解析,运行的
④浏览器输出:
a. 控制台输出:console.log("字符串")`
b. 网页中输出内容: document.write("字符串")
c. 提示框的方式展示: window.alert("字符串")
(2)数据类型+变量
①数据类型:
	number 	数字   			例如:1、 1.2 
	string   	字符串类型  	例如:"字符串" 或 '字符串'
	boolean 	布尔类型 		例如:true  false
	object 	对象类型
②变量:
	定义变量: 		var 变量名;
	赋值: 			变量名 = 值;
	定义变量赋值: 	var a = 10;
③特殊值:
	undefined  	未定义   	场景:定义了变量,没有赋值。
    NaN        	非数    	场景:将非数字的内容,强行当做数字使用。
	null       	空值    	场景:var a = null; //清空变量。
(3)运算符表达式
①运算符:  + - * / % 、> < >= <= == && || 、 === (全等,不单比较内容还比较类型),支持位运算符(例如:>>)
	  注意:	10/3 		结果  	3.333333
			3 == "3" 		结果   	true	
			3.0 == “3”	结果	true(主要取决于浏览器对浮点数存储的字面值)
			3 === “3”		结果	false
			8 >> 2		结果	2 (效率高)
②三元运算符
boolean表达式?值1:值2
(4)流程控制
if () {}
If () {} else {}
if () {} else if () {} else {}
switch - case
while ( ){循环代码}
do - while
for (初始化; 条件 ; 步长) {循环体}
注意:
条件判断:	if('1'==1)				true
			if(1)					true
			if(0)					false
			if(“abc”)				true		字符串长度不为0
			if(“”)   				false
			if(undifiend/NaN/null)	false

2).JavaScript - 函数(内置函数、自定义函数)

概念: 一组具有特定”功能”的代码
(1)内置函数
	parseInt(值);	将参数的值转化为整数
	typeof(值);	获得值的数据类型。
	isNaN(值);	判断值是不是非数,不关系数据类型【是数字  false     不是数字   true】
(2)自定义函数
函数定义:
①定义方式1:
function 函数名(参数名1,参数名2) {
    		函数体
    		(return 值;) }
②定义方式2 :[匿名函数]
var 函数名 = function(形参) {函数体}
③定义方式3:构造方法定义函数
var 变量名/函数名 = new Function("a","b","return a+b");   //函数
函数调用:
	①函数名(参数)
	②函数名()
(3)函数特点:
①形参只需要写形参名,不写形参的var。例如:function f(a, b){}
②函数声明,不需要明确返回值类型	
③函数也是一个值[数据],function类型    (重要)
	定义:var 函数名 = function(参数1,参数2){函数体}   //此”变量”的类型为function类型
④函数调用的时候,函数传入参数个数,语法上不限制
	说明:如果不传,使用时会是undefined;若果传少于参数个数,自动依次赋值,后面的为undefined
		  如果传入的参数的个数多与参数表的参数个数,只匹配前面的;
	注意:函数体内有一个内置局部变量arguments,保存了所有参入方法的参数,⑥
⑤JavaScript函数,没有重载。此特性可依据:
	function f() {}				---->	var f = function(){};
	function f(a, b) {}			----> var f = function(){a, b};
⑥函数内部,有一个局部变量,arguments 保存函数调用的时候,传入的实际参数。

3).JavaScript - Math、Date、String、数组

JavaScript对象
(1)Math:数学函数
属性:	Math.属性名;  	例如:Math.PI    圆周率
方法:	Math.方法名();	例如:Math.sqrt(x);//对x求平方根
							  Math.random();//随机生成一个0~1的数字
(2)Date:日期
①创建日期:
	var d = new Date();				获得浏览器所在电脑的当前系统时间。
	var d = new Date("1999-9-9");	构造一个指定的日期时间
②方法:
	getFullYear();		获得4位年份
	getMonth();		获得月份   1月~12月份对应的0~11
	getDate();		获得日期
	getDay();			0 (星期日)  ~  6 (星期六)
(3)String:字符串
①获得字符串:var a = "zzzzz"; 
②属性:例如length   	字符串的长度
③方法:例如charAt(i);	获得i下标的字符
(4)数组[重要]
①创建数组:
		var as = [];
		var as = [1,2,3];
	数组赋值:数组变量名[下标] = 值;
    访问数组中的值: 数组变量[下标]
②属性:
		length	//数组的长度;
③JavaScript数组特点
	a. 声明数组  [];
	b. 数组长度可变;
	c. 数组中未赋值的下标上的值:undefined
    d. 同一个数组中,元素类型不受限制
④方法:
	sort();	将数组中的内容,按照字符串的方式排序
	指定sort排序规则:
		方式:按照如下规则排序,会将每两个比较元素,传给内部的函数a,b,通过返回值决定排序的顺序
		sort(function(a,b){
        	return a-b;     //返回值 1   -1   0
		});
⑤遍历数组
	for(var I = 0; I < 数组名.length; i++) {
   		数组名[i];  	//通过下标取值
	}
		倒着遍历:
	for(var I = 数组名.length - 1; I >= 0; i--) {
		console.log(数组名[i]);  	//控制台打印
	}
4).JavaScript - 面向对象
没有类概念,没对象的模板,所有不能new对象
①创建JavaScript对象
	方式1:var p = {};
    方式2:var p = { "属性名":值,  "属性名":值 };
    例如:var person = {
				"id" : "10001",
        		"函数名" : function(){}				//成员方法
				“对象名” : {						//方法属性为一个对象类型
		  “属性名” : 值 …		
};
    			};
②给对象添加属性:
	对象.属性名 = 值;
③访问对象的属性:
	对象.属性名
	对象["属性名"]
④调用对象的方法
	对象.函数属性名();
⑤this关键字
var person = {
    "name" : "zhi",
    "方法名":function(){
        console.log(this.name);//this----代表当前person对象
    }
}
⑥遍历对象中的所有属性
	语法: for-each
	for( (var)  v  in 对象 ) {
    	//v是当前被遍历到的属性名, 是String类型,例如:”name"、"id"
        //获得属性值: 对象[v] , 	因为-->对象.”name”不能表示属性
	}

5).JavaScript - 事件

事件驱动编程
(1)常见的事件
① 鼠标相关
onclick				单击事件
ondblclick			双击事件
onmouseover		鼠标移入
onmouseout		鼠标移出
onmousemove		鼠标移动
onmousedown		鼠标按下
onmouseup			鼠标松开
② body相关事件
onKeyDown   		键盘按键按下
onKeyUp			键盘按键抬起
onload =    fun//页面加载完毕触发[重要]
onunload			窗口离开时触发(刷新,返回,前进,主页...)
onscroll			页面滚动 [应用: ]
onresize			缩放页面
③ form表单控件相关事件[最重要]
onblur				当前元素失去焦点				<input>标签
onchange			当前元素失去焦点,并且值改变时	<input>标签
onfocus			当前元素获得焦点时				<input>标签
onsubmit			表单提交时					 	<form>标签
(2)事件注意事项
① 事件监听器绑定的时间函数内,有一个局部变量 event
	 事件对象event:
    	event.target   	---- 事件源(标签)
		event.keyCode  	----  按下了哪个按键
		event.type     	---- 事件名称("click","dblclick")
② HTML默认事件效果
禁用超链接默认事件:
    	<a href="http://www.baidu.com" onclick="return false">百度一下</a>
		 禁用form默认事件。
    	<form onsubmit="return false" >        </form>
③ 事件冒泡:
	 事件触发会从子标签,冒泡方式,逐步触发父标签的事件动作
	 如果防止事件冒泡:
		谷歌/FF 浏览器: event.stopPropagation();//停止事件冒泡
		IE: event.cancleBubble = true;//取消事件冒泡

6).JavaScript - DOM编程、开发规范[重要]、基于编程的事件绑定

(1)DOM编程概要
概念:D(document 网页)  O(Object)  M(Model)
一个HTML标签对应的一个浏览器内部的 DOM对象
浏览器加载HTML标签机制:
 

标签和dom对象对应关系:
 
(2)DOM操作
访问DOM对象
获得DOM对象: 
①根据标签的id获得dom对象:		var xx_dom = document.getElementById("标签的id");
②根据标签名获得标签对象:		var xx_doms = document.getElementsByTagName("标签名");//返回数组
③根据标签的class名字获得标签对象:	var xx_doms = document.getElementsByClassName("class值");
原则:①父标签拥有查找子标签的权限 : 标签(document).getElementsxxxxx();
    	②建议查找标签的dom对象,尽可能用父标签,进行精确查找。
补充:通过事件函数传递标签dom对象 ---> 可以使用this关键字代替当前的标签的dom对象
访问dom对象的属性
标签属性:
		dom对象.属性名
		dom对象.属性名 = "";
标签体[笔试]:
		dom对象.innerText   	标签体中间的普通文本。
		dom对象.innerHTML 	标签体中间的所有内容(文本+标签)
样式属性:
		访问类型			样式名称					js访问方式
		操作文字颜色	 	style="color:red"	  		 	dom对象.style.color
		操作文字大小		style="font-size:18px"     		dom对象.style.fontSize
		操作背景色		   	style="background-color:red"  	dom对象.style.backgroundColor
表单属性:
		访问标签的输入内容
		标签input的dom对象.value
下拉列表属性:
		select相关的属性: 
		select的dom对象.options    下拉列表中所有的选项。
		select的dom对象.selectedIndex  被选中的选项的下标
		select的dom对象.options.length=0	清空下拉列表:
DOM对象常见的操作方法
① 创建DOM对象:var xx_dom = document.createElement("标签名");
② 将dom对象,添加在某个标签的内部
   把tr标签的dom对象,添加在tbody内部
   tbody(亲爹)父标签dom对象.appendChild(子标签dom对象); //最后一个孩子位置
② 删除: 本标签dom对象.remove();//将本dom对象从网页中删除,消失。
④ 常用的dom遍历的属性
  	dom对象.parentNode     	访问Dom对象的亲爹(直接父标签)
   	dom对象.nextSibling    	直接弟弟标签(可能有空白节点)
   	dom对象.previosSibling 	直接哥哥标签(可能有空白节点)
   	dom对象.childNodes     	dom对象的所有儿子标签dom对象。(包含空白部分)
(3)开发规范[重点]
①变量定义规范(函数定义规范)
将逻辑相关的多个js函数定义在一个对象中
var userTable = {
    "addUser":function(){},
    "removeUser":function(){}
}
调用: userTable.addUser()

②基于编程事件绑定
获得标签标签绑定事件代码,放在网页加载完毕之后再运行body 的onload
事件绑定[重点]:
a. 基于标签的事件绑定
<标签 onclick="事件函数()"></标签>
b. 基于编程的事件绑定
标签+事件监听器+事件函数
① 先获得dom对象。
	var dom = document.getElementById("");
② 使用dom的事件监听器属性绑定事件函数
	dom.onclick = function(){
		// this 代表当前事件源对象  dom对象。
		alert("dom被点击了情况下,执行了");
	}
(4)基于编程的事件绑定
① 绑定事件:dom对象.onclick = function(){函数事件触发执行}
②在事件函数内,禁用默认事件(超链接,表单)
dom对象.onclick = function(){
    return false;    //禁用默认事件
}
③基于编程绑定 网页加载后运行的代码
window.onload = function(){
    网页加载完毕之后。//给标签绑定事件
}

7).JavaScript - 正则表达式

作用:
通过表达式验证输入的内容是否符合一定的规则(数字,小数,yyyy-MM-dd,手机号,邮箱)
正则表达式.test("判断的字符串");  //true   或者  false
语法: /正则表达式规则/.test(字符串)
用法:
	例1:	var email = "huanghao@qq.com";
			① 判断email中是否包含@符号: /[@]/.test(email)  		//true
			② 判断email中是否包含 "@qq.com":console.log(/@qq.com/.test(email));//true
	例2:	var age = "999";/
			判断age中是否是数字:/^d{3}$/.test(age);				//true
	例3:	var birth = "199-9-9";
			判断birth字符串中是否是日期格式:/^d{4}-d{1,2}-d{1,2}$/.test(birth);
	例4:	var price = "123.23";
			判断是否为小数:/^-?d+.d+$/.test(price);  				// ‘.’为转义的点
	例5:	var mobile = "15533349688";// 1  [358967]
			判断是否为手机号:/^1(3|5|6|7|8|9)d{9}$/.test(mobile);
	例6:	/^[u4e00-u9fa5]$/.test(…)
			判断是否包含一个汉字
参考文档:
查找某个范围内的字符
|        [abc]         	| 查找方括号之间的任何一个字符        	|
|        [0-9]         	| 查找任何从 0 至 9 的一个数字          |
|        [a-z]         	| 查找任何从小写 a 到小写 z 的一个字符  	|
|        [A-Z]         	| 查找任何从大写 A 到大写 Z 的一个字符 	|
|        [A-z]         	| 查找任何从大写 A 到小写 z 的字符   	|
|       [^adgk]        	| 查找给定集合外的任何一个字符         	|
|  (red|blue|green)  	| 查找任何指定的一个选项                	|
|  		[0-9a-zA-Z]   		| 一个数字或者字母(大小写) 				|
|	 [u4e00-u9fa5] 		| 匹配包含任意一个汉字					|
| 		[a-d|m-z]    		| a-d 或者 m-z							|
元字符        	                                       	
|          w          	| 查找单词字符,等价于[A-Z0-9a-z_]      	|
|          W          	| 查找非单词字符。                      	|
|          d          	| 查找数字,等价于[0-9]                 	|
|          D          	| 查找非数字字符。                      	|
|          s          	| 查找空白字符。                        	|
|          S          	| 查找非空白字符。                      	|
量词+边界       	                                       	
|          n+          	| 匹配任何包含至少一个 n 的字符串。     |
|          n*          	| 匹配任何包含零个或多个 n 的字符串。   	|
|          n?          	| 匹配任何包含零个或一个 n 的字符串。   	|
|         n{X}         	| 匹配包含 X 个 n 的序列的字符串。      |
|        n{X,Y}        	| 匹配包含 X 至 Y 个 n 的序列的字符串。 	|
|        n{X,}         	| 匹配包含至少 X 个 n 的序列的字符串。  |
|          n$          	| 匹配任何结尾为 n 的字符串。           	|
|          ^n          	| 匹配任何开头为 n 的字符串。           	|

8).JavaScript - BOM编程

BOM:B(browser) O(Object) M(Model) 浏览器对象模型。是将浏览器窗口的所有元素映射对象
例如:
窗口					window			注:window中的属性的访问可以不写window
浏览器历史记录		 	window.history
地址栏             		window.location
作用:通过javascriot代码操作浏览器的行为(刷新,弹框,警告框,对话框,确认框,定时器,地址栏跳转,窗的打开和关闭...)
(1)window相关
window的常见属性:
	alert
    history
    location
    document  
①提示框:window.alert("提示文字");
②确认框:var r = window.confirm("提示确认的文字");
		返回值: 	true	用户点击确定
           		false	用户点击取消
③对话框:var r = window.prompt("提示文字");
		返回值:用户输入的内容。
④周期定时器:window.setInterval(周期性调用的函数,间隔时间毫秒);
⑤延迟定时器:window.setTimeout(延迟调用的函数,相隔多少时间之后运行);
⑥窗口的打开和关闭:
		window.close();//关闭当前窗口【有的浏览不让关】
		window.open("地址");//打开新的窗口,地址栏显示。
(2)history相关
操作网页前进,后退,刷新:
history.go(1|0|-1);前进  刷新  后退
(3)location相关
地址栏地址:location.href = "uri"; //给个地址, 并完成跳转。
总结:请求服务器资源方式
	①手动浏览器地址栏
    ②超链接
    ③form表单的action
    ④location.href = 
⑥img src=""
原文地址:https://www.cnblogs.com/jwnming/p/13634936.html