web前端Javascript

js定义:
是一种运行于js解释器引擎中的解释型语言

运行环境:
1.独立安装的js解释器(nodejs)
2.嵌入在浏览器内核中js解释器

js组成:
1.核心(ECMAScript)
2.文档对象模型(DOM)
3.浏览器对象模型(BOM)

浏览器内核作用:
负责页面内容的渲染
主要由两部分组成:
1.内容排版引擎解析HTML和CSS
2.脚本解释引擎解释js

使用方法:

//1.在元素事件嵌入js代码
<html>
	<body>
		<button onclick="console.log('hello world');>
		</button>
	</body>
</html>

//2.将sj脚本嵌入在html页面中执行
<html>
	<body>
		<hr>
		<script>
			document.write('<b>欢迎</b>');
			console.log('脚本执行结束了...');
		</script>
		</hr>
	</body>
</html>



//3.引入外部js文件,script包含内不能有任何js代码,可以另写一个script
<html>
	<head>
		<script src="myscript.js"></script>
	</head>
	<body>
	</body>
</html>

变量:
js在正式执行之前,会将所有var声明的变量和function声明的函数,预读到所在作用域的顶部,但是对变量的赋值,还保留在原来的位置处

声明:var 变量名(当声明变量时少了var,该变量则为全局变量)
赋值:var 变量名 = 25.5
可以使用document.write()或者console.log()输出

一次性声明多个变量:

var num1=1, num2=2, num3=3;

数据类型:
1.原始类型
数字类型:32位整数以及64位浮点数

字符串类型:
内存中占2个字节
\u4e00:汉字的起始字符
\u9fa5:汉字的结束字符

布尔类型:
true:真(1)
false:假(0)

空类型:
null(声明对象未赋值)

未定义:
undefined(1.声明变量未赋值 2.访问对象不存在的属性)
2.引用类型

数据类型转化:
隐士转换:
函数:typeof()获取声明变量的类型

Nan:Not a Number
函数:isNan()判断数据是否未非数字

所有数据类型与string类型相加结果都为string

强制转换:
函数toString:变量.toString()
函数parseInt():parseInt(变量)
注意:
parseInt从左到右依次转换,碰到第一个非整数字符,则停止转换,如果第一个字符就是非整数字符的话,结果未NaN
函数parseFloat():parseFloat(变量)

函数Number():Number(变量)将一个字符串解析未number
注意:
如果包含非法字符,返回NaN

运算符与表达式:

!=
==//判断等于,注意:不比较类型,值比较数值
!==
===//出数值外,连同类型也会一起比较

函数:
函数定义:
function 函数名(){
可执行语句;
}

//定义
function printHello(){
	console.log('hello');
}

//调用
printHello();

分支结构:
if-else:
if(条件表达式){
语句块
}else if(){
}

条件为真的情况:
if(1)
if(“我帅吗”)
条件为假的情况:
if(0\0.0""\numm\undefined\Nan)

switch-case:
switch(表达式)
{
case 值1:break;
}

循环结构:

while(布尔表达式)
{
	循环体语句;
}

do{
	可执行语句;
}while(布尔表达式);

for(表达式1;表达式2; 表达式3)
{
}

数组:
索引数组:
数组长度:length属性
创建:
1.var arr=[];
2.var arr = new Array();

数组缩容:减小arr.length的值

特殊:
1.长度可变
2.不限制下标:
数组越界访问不报错,返回undefined
对越界的数组元素赋值,不报错,会修改length的大小
3.不限制元素的数据类型

var arr  = [1, 2 , 3]
var arr = new Array("dj","ddjj")

关联数组:
length失效
1.创建数组:

var bookInfo=[];
bookInfo['bookName']='西游记';

//遍历
for(var key in hash){
	hash[key];
}

数组API:
数组转字符串:
1.String(arr):将arr中每个元素转成字符串,用逗号分隔
2.arr.join(“连接符”):将arr中每个元素转为字符串

拼接和选取:
var newArr = arr1.concat(值1,值2,值3,…)//拼接多个数组到一个数组中

var subArr = arr.slice(starti, endi+1)//选取从start到endi元素组成新数组刚给subArr

arr.splice(starti, n)//直接修改原数组,从第i个位置开始,删除n个元素

插入:
arr.splice(starti, 0, 值1, 值2,…)//删除的元素和插入元素个数可以不同

颠倒:
arr.reverse()

排序:
arr.sort()//只能排列字符串类型的元素

DOM查找:
按id属性查找:
var elem = document.getElementById(“id”);

按标签名查找:
var elems = parent.getElementsByTagName(“tag”);//查找指定parent节点下的所有标签为tag的子代节点

按name属性查找:
var elems = document.getElementsByName(‘name属性值’)

按class查找:
var elems = parent.getElementsByClassName(“class”);

通过css选择器查找
1.只找一个元素:
var elem = document.querySelector(“selector”);//selector支持一切css中选择器,如果找到多个只返回第一个
2.找多个:
var elems = document.querySelectorAll(“selector”)

DOM修改:
核心DOM:可操作一切结构化文档的API,包括HTML和XMl(万能,繁琐)
读取属性值:
1.先获得属性节点对象,再获得节点对象的值
var arrtNode = elem.attributes[下标/属性名]
var attrNode = elem.getAttributeNode(属性)

var value = attrNode.value;

2.直接获得属性值:
var value = elem.getAttribute(“属性名”);

修改属性:
elem.setAttribute(“属性名”, “value”);

var h1 = document.getElementById("a1");
h1.setAttributeNode("name", zhangji);

判断是否包含指定属性:
var bool = elem.hasAttribute(“属性名”);

document.getElementById("bt1").hasAttribute('onclick');

移除属性:
elem.removeAttribute(“属性名”);
HTML DOM: 专门操作HTML文档的简化版DOM

对于内联样式:
获取:elem.style.属性名
注意:
属性名要去掉横线变成大写字母开头
ep:
background-color => backgroundColor

获取样式:

//1获取行内样式
obj.style.width/height/backgroundColor
//2.获取非行内样式(css)
function(obj, width){
	obj.currentStyle['width']//ie支持
	getComputedStyle[obj, null]['width']//谷歌,火狐支持
}

DOM添加:
1.创建空元素
docuent.createElement(“元素名”)
删除元素
parent.removeChild(child)
2.设置关键属性
添加内容:a.innerHTML = “内容”
设置关键属性:a.href = “http://tmooc/cn”
设置关键样式:a.style.opacity = “1”,
a.style.cssText = “width: 100px; height:100px”;
3.将元素添加到DOM树:
法1:
parentNode.appendChild(childNode)

var div = document.createElement("div");
var txt = document.createTextNode("版权声明");
div.appendChild(txt);
document.body.appendChild(div);

法2:
parentNode.insertBefore(newChild, existingChild)

<ul id="menu">
	<li>首页</li>
	<li>联系我们</li>
</ul>

var ul = docutment.getElementById("menu");
var newLi = document.createElement("li");
ul.insertBefore(newLi, ul.lastChild);

添加元素优化:
法1:
如果同时创建父元素和子元素,建议在内存中先将子元素添加到父元素,在将父元素一次性挂到页面
法2:
如果只添加多个平级子元素时,就要将所有子元素,临时添加到文档片段中,再将文档片段整体添加到页面

//创建文档片段
var frag = document.createDocumentFragment();
frag.appendChild(child);
parent.appendChild(frag);

BOM:
定义:brower object Model,专门操作浏览器的API
window:代表整个窗口

history:封装当前窗口打开后,成功访问过的历史url
navigator:封装浏览器配置信息
document:封装当前正在加载的网页内容
location:封装了当前窗口正在打开的url地址
screen:封装了屏幕信息
event:定义了网页中的时间机制

//获取完整窗口大小:
window.outerWidth.outerHeight
文档显示区大小:
window.innerWidth/innerHeight
//事件
window.onload = function(){};//文档加载完毕触发
window.resize = function(){}//窗口大小改变触发

事件

/*
onmouseover
onmouseout
onmouseup(鼠标松开)
onmousedown
onmousemove
onclick
ondblclick(双击)
onblur(失去焦点)
nofocus(得到焦点)
*/

//3种添加事件方法
<div id="div" style="width:300px; height:300px; background-color:red"></div>

//法1
<script>
	var div = document.getElementById("div");
	div.onclick = change;
	function change(){
		div.style.backgroundColor = "yellow";
	}
</script>

//法二
<div id="div" style="width:300px; height:300px; background-color:red" onclick="change(this)"></div>
<script>
		function change(obj){
		obj.style.backgroundColor = "yellow";
	}
</script>

//法三
<script>
	var div = document.getElementById("div");
	div.onclick = function change(){
		div.style.backgroundColor = "yellow";
	}
</script>

事件绑定(触发两个事件):

//主流浏览器
obj.addEventListener('事件名去掉on', 方法名);
obj.removeEventListener('事件名去点on');
//IE浏览器
obj.attachEvent('事件名',方法名);
obj.removeEvent('事件名');

事件冒泡:

在这里插入图片描述
如下代码:当点击黄色区域时,控制台会有两个输出,也就是两个函数都响应了这就称为事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>mysite</title>
</head>
<body>
	<div id='1' style="width:300px; height: 300px; background-color: red;">
		<div id="2" style="width: 100px;height: 100px; background-color: yellow;"></div>
	</div>
</body>
<script type="text/javascript">
	var div1 = document.getElementById('1');
	div1.onclick = f1;
	var div2 = document.getElementById('2');
	div2.onclick = f2;
	function f1(ev){
		console.log(300);
	}
	function f2(ev){
		var Event= ev || window.event;//获取事件对象,ev为主流浏览器支持,window.event为ie支持
		Event.cancelBubble = true;
		console.log(100);
	}
</script>
</html>

js操纵表单和下拉列表:

//表单
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>my website</title>
</head>
<body>
	<form action="1.php" method="post" id="frm" name="frm">
		<input type="text" name="username" value="dj"><br/>
		<input type="password" name="userpwd" value="123"><br/>
		<input type="submit" value="提交">
		<a href="#" onclick="return f1()">提交2</a>
	</form>
</body>
<script type="text/javascript">
	//获取表单
	//法1,通过id获取
	var frm = document.getElementById('frm');
	//法二,通过name获取
	var frm2 = document.frm;
	//alert(frm2);
	//法三
	var frm3 = document.forms[0];
	//alert(frm3);
	
	//操纵表单
	//获取action和method属性
	alert(frm.action + " " + frm.method);
	//获取表单提交内容
	alert(frm.username.value);
	alert(frm.userpwd.value);

	//表单中的submit方法
	function f1(){
		frm.submit();
		return false;
	}
</script>
</html>
//下拉列表
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>my website</title>
</head>
<body>
	<select id="sel">
		<option value="100">西瓜</option>
		<option value="200">橘子</option>
		<option value="300">橙子</option>
		<option value="400">柠檬</option>
	</select>
</body>
<script type="text/javascript">
	var oSel = document.getElementById("sel");
	oSel.onchange = function(){
		console.log(oSel.selectedIndex);
		console.log(oSel.options[oSel.selectedIndex].value);
	}
	
//jquery代码
var value = $("#select option:selected").val();
</script>
</html>

定时器:
用处:
让程序按指定时间间隔自动执行任务
网页动态效果,计时器功能等

分类:
周期性定时器:
setInterval(exp, time)//exp为执行语句,time为时间间隔,毫秒

setInterval(function(){
	console.log("hello world");
},1000);

//停止定时器:
//1.先给定时器取名
var timer = setInterval(exp, time);
//2.停止计时器
clearInterval(timer);

一次性定时器:
setTimeout(exp, time);

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>my website</title>
</head>
<body>
	<div style="width:100px; height:100px; margin:auto; background-color:yellow; font-size: 50px; color: red;text-align:center; line-height:100px;" onmouseover="f1()"onmouseout="f2()"></div>
</body>	
<script type="text/javascript">
	var div = document.getElementsByTagName('div');
	var timer = null;
	var i = '0';
	
	function f1(){
		div[0].innerHTML = ++i;
		timer = setTimeout(function(){
			f1();
		}, 1000);
	}
	function f2(){
		console.log("有效2");
		clearTimeout(timer);
	}
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值