javaScript
JavaScript能做什么?
修改HTML的属性
javaScript的特点
- 解释型脚本语言,逐行进行解释
- 可以创建对象,也可以使用现有对象
- 变量的数据类型在运行过程中可以变化
js代码写在script标签中,最好写在head中,写在body中也行.
代码的执行顺序是从上到下的;
代码
输出效果
打开网页控制台console的快捷键ctrl+shift+i
使用JS的方式
- 在head中使用script标签直接写
- 在head中使用script标签链接js文件
注意:如果两种方式都使用,只有一种方式生效(按照顺序)
排查网页代码书写错误的方式
-
控制台console中看
-
在调试器(Sources)中查看
JS变量
var 直接声明你想要的类型
常用的数据类型
数值类型: number
字符串类型: String 可以用’ ’ 也可以用""
对象类型: object
布尔类型: boolean
函数类型: function
示例:
var n1 = “汤姆”//代表n1就是String类型
var n1 = 123 ;//代表n1就是number类型
特殊值
undefined 变量未初始赋值 ,默认undefined
null 空值
NaN 非数值
代码1
var n1 = 10.1;
console.log(n1);
console.log(typeof n1);
var n2 = true;
console.log(n2);
console.log(typeof n2);
代码2
console结果
运算符
算术运算符
赋值运算符
关系运算符
逻辑运算符
&& 且运算
- 当表达式全为真的时候,返回最后一个表达式的值
- 当表达式中,有一个为假的时候,返回第一个为假的表达式的值
|| 或运算
- 当表达式全为假时,返回最后一个表达式的值
- 只有一个表达式为真,就会返回第一个为真的表达式的值
&& ,||有短路现象
当有确定结果后,后面的表达式不执行?
代码
<script type="text/javascript">
var num1 = 1;
var num2 = 2;
var num3 = (num1++ < 100)|| num2++ ;
alert("num1=" + num1 + "num2="+num2 );
</script>
效果图
条件运算符
类似三元运算符(一真大师)
代码
<script type="text/javascript">
//如果条件表达式为T,返回第一个值,否则返回第二个值
var res = (10<1)? "汤姆": "tangMu" ;
alert("res="+res);
</script>
效果图
JS数组
数组定义的方式
-
直接赋值
示例:
var num1 = [1,2,3,4];
-
定义一个空数组不固定数组的长度,后面再给数组中每一个元素赋值,会自动给数组扩容.
示例:
var num1 = [];
num1[0] = 1;
num1[1]= 2;
…
-
new Array()
不直接赋值定义为空数组时也会自动扩容
示例:
var num1 = new Array (1,2,3);
数组遍历
代码
<script type="text/javascript">
var cars = ["宝马","奥迪","奔驰","bba",17];
console.log("数组的长度" + cars.length)
for (let i = 0; i < cars.length; i++) {
console.log(cars[i]);
}
</script>
效果图
函数
function
概念
如果不调用函数,函数不会执行.
调用方式:
-
主动调用 a()
示例:
代码
function a(){ alert("你好function"); }//命名可以随便命名 a()- >b() a();
达到效果图
-
通过事件去触发函数
代码
<head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var cars = ["宝马","奥迪","奔驰","bba",17]; console.log("数组的长度" + cars.length) for (let i = 0; i < cars.length; i++) { console.log(cars[i]); } function a(){ alert("你好function"); } </script> </head> <body> <button onclick="a()">点击这里</button> </body>
达到效果
定义函数
function
基本语法:
function 函数名(形参列表){
函数体
return 表达式
}
调用:
函数名(实参列表);
代码:
//无参无返回值
function hi(){
alert("say hi");
}
hi();
//有参数有返回值
function h2(id,name){
return id+name ;
}
alert( h2(1,2)
);
效果图:
var
基本语法:
var 函数名 = function(形参列表){
return 表达式;
}
调用:
函数名(实参列表);
示例:
-
代码
var num3 = function (id){ return id ; } alert(num3(100));
-
效果图
JS函数注意事项和细节
-
JS函数重载会覆盖掉上一次的定义
示例:
代码
function num1(){ alert("你好无参num1"); } num1(); function num1(name){ alert("你好有参"+name); } num1();
效果图
-
函数的agrument隐形参数(作用域在fuction 函数内)agrument是数组
- 隐形参数:在function函数中不需要定义,可以直接用来获取所有参数的变量
- 隐形参数特别像java中可变参数.public void fun(int…args)
- js中隐形参数操作和Java可变参数一样,操作类似数组
示例:
代码
function arr(){
//遍历数组,注意console.log("arr="+arguments)会自动变成Object
console.log("arr=",arguments);
}
arr("小红","小黄","小楠");
效果图
示例2
如果有形参,在调用时形参个数与实参个数不匹配
-
形参 < 实参
- 如果匹配上了就赋值,但所有的实参都会存入arguments中
-
形参 > 实参
- 所有实参都会加入到arguments中,未匹配上的形参会被赋值为undefined
老韩练习
练习1
代码:
function sum1() {
//是否要用到arguments
var num0 = 0;
for (let i = 0; i < arguments.length; i++) {
if (typeof (arguments[i]) == "number") {
num0 += arguments[i];
}
}
return num0 ;
}
alert(sum1(1,2,3,"汤姆"));
//注意:
错误列表:
1,判断的应该是遍历过的arguments[i],而不是整个arguements
2,返回值时在for循环执行完后返回
效果图:
自定义对象方式
Object
定义方式
var 对象名 = new Object();//对象实例(空对象)
对象名.属性 = 值;//定义一个属性值
对象名.函数名 = function(){}//定义一个函数
访问对象
对象名.属性
对象名.函数名();
注意:当访问未定义的对象的属性或函数时,会自动转换为undefined类型.
示例:
代码
var obj = new Object();//无参类型
obj.name = "汤姆";
obj.meth = function (){
alert("hello汤姆");
console.log(this.name)
}
//调用Object对象
alert(obj.name);
obj.meth();
{}形式
语法
var 对象名 = {
属性名 : 值,//定义属性
属性名 : 值 ,
函数名 : function(){}//定义函数
}
访问对象
对象名.属性名;
对象名.函数名();
示例:
代码:
var kh = {
name : "汤姆",
id : 1 ,
hi:function (){
alert("你好汤姆");
}
}
alert(kh.name+kh.id);
kh.hi();
事件
静态注册事件
通过html标签的事件 属性直接赋予事件响应后的代码
动态注册事件
通过js代码得到标签的dom对象,然后再通过dom对象.事件名 = function(){}
示例:
代码
<head>
//静态注册事件
function hi(){
alert("---静态注册事件");
}
window.onload = function (){
alert("---动态注册事件");
}
</script>
</head>
<body>
<h1>hello</h1>
<input type="text" value="test">
</body>
常用事件
onload
window.onload = function (){
}
注意:window.onload 让页面先加载完毕
onClick事件
代码:
<script type="text/javascript">
function sayOK() {
alert("你点击了sayOK按钮");
}
window.onload = function (){
var btn01 = document.getElementById("btn01");
alert(btn01);
btn01.onclick = function (){
alert("你点击了sayhi按钮");
}
}
</script>
<body>
<button onclick="sayOK()">sayOK按钮</button>
<button id="btn01">sayhi按钮</button>
</body>
注意:这里获取到id = “btn01” 的button 是用document.getElementById()
onblur
onblur失去焦点事件
代码
<script type="text/javascript">
//静态注册事件onblur
function update(){
//获得input输入的属性值
//1,先获得dom对象用document
var name1 = document.getElementById("name1");
//将获得的value变为大写字母再重新赋值给原来的value
name1.value = name1.value.toUpperCase();
}
//动态onblur事件
window.onload = function (){
//先获得input输入的属性值
var name2 = document.getElementById("name2");
//将获得的value变为大写字母再重新赋值给原来的value
name2.onblur = function () {
name2.value = name2.value.toUpperCase();
}
}
</script>
<body>
请输入英文单词:
<input type="text" id="name1" onblur="update()"><br>
请输入英文单词:
<input type="text" id="name2">
</body>
效果图:
onchange内容发生改变事件
国家->省->市等等
代码:
<script type="text/javascript">
//静态注册事件onchange
function change(){
alert("您的工资发送了改变");
}
//动态注册事件onchange
window.onload = function (){
//先获取select的dom对象
var girl = document.getElementById("girl");
//将获取的对象绑定onchange事件
girl.onchange = function (){
alert("您的女票发生变化");
}
}
</script>
<body>
<select onchange="change()">
<option>--工资范围--</option>
<option>10k以下</option>
<option>10k-20k</option>
<option>20k-30k</option>
</select><br>
<!-- 女票变化-->
<select id="girl">
<option>女票变化</option>
<option>小红</option>
<option>小绿</option>
<option>小黄</option>
</select>
</body>
效果图:
表单提交事件
静态注册事件(表单)
代码:
<script type="text/javascript">
function form1(){
//判断提交信息是否为空如果为空,无法跳转页面
//步骤
//1先根据获取表单中value
var host = document.getElementById("host");
var pwd = document.getElementById("pwd");
var value1 = "";
if(host.value == value1||pwd.value == value1){
alert("您输入的为空,请重新输入");
return false ;
}
return true ;
}
</script>
<body>
<form action="onblur.html" onsubmit="return form1()">
账户名:
<input type="text" id="host" name="account"><br>
密码:
<input type="text" id="pwd" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
效果图
动态注册事件(表单)
代码
<script type="text/javascript">
//动态注册表单提交事件
//1,先获取表单的dom对象
window.onload = function () {
var form1 = document.getElementById("form1");
//创建表单的提交事件
form1.onsubmit = function () {
//对表单中的属性直接进行判断
if (form1.account.value == "" || form1.password.value == "") {
alert("输入不能为空白请重新输入");
return false;
}
return true;
}
}
</script>
<body>
<form action="onblur.html" id = "form1">
账户名:
<input type="text" id="host" name="account"><br>
密码:
<input type="text" id="pwd" name="password"><br>
<input type="submit" value="提交">
</form>
</body>
效果图
表单提交事件(js正则)
js中正则表达式的转义符使用的是 /
代码:
<script type="text/javascript">
//1,用户名的长度为4-6位
//先取出用户名的dom对象
window.onload = function () {
var form1 = document.getElementById("form1");
form1.onsubmit = function () {
if (form1.hostName.value.length < 4 || form1.hostName.value.length > 6) {
alert("输入的用户名长度必须为4-6");
return false;
}
if (form1.pwd.value.length != 6) {
alert("输入的密码长度必须为6");
return false;
}
if (form1.pwd.value != form1.pwd1.value) {
alert("输入密码不一致,请重新输入");
return false;
}
//例如123-@souHu.com
//是直接写匹配模式去==匹配吗?
//不是
//写正则表达式的dom对象,调用test()方法
var email01 = '/^[\w-]+@([a-zA-Z]+\.)+[a-zA-Z]+$/';
if (!email01.test(form1.email01.value)){
alert("您输入的格式不正确请重新输入")
return false;
}
}
}
</script>
<h1>注册用户</h1>
<form action="onblur.html" id="form1">
用户名: <input type="text" name="hostName"><br>
密 码: <input type="password" name="pwd"><br>
确 认: <input type="password" name="pwd1"><br>
电 邮: <input type="email" name="email01"><br>
<input type="submit" value="注册用户">
</form>
效果图
DOM
Document Object Model 文档对象模型
功能:
把文档中标签,属性,文本,转换成为对象来管理
document
案例1
代码
<script type="text/javascript">
//动态点击事件
//先获取事件的对象
window.onload = function () {
var name1 = document.getElementById("name1");
name1.onclick = function (){
alert(name1.innerText);
}
}
//静态点击事件
function test(){
//先获取h对象
var elementById = document.getElementById("name2");
elementById.onclick = function () {
alert(elementById.innerText);
}
}
</script>
<body>
<h1 id="name1"value = "韩顺平教育">韩顺平教育</h1>
<h1 id="name2" onclick="test()">Tom</h1>
</body>
效果图
案例2(多选框)
代码:
<script type="text/javascript">
function selectAll(){
//获取同一组选项
var sport = document.getElementsByName("sport");
//遍历NodeList,将checked赋值为true
for (let i = 0; i < sport.length; i++) {
sport[i].checked = true ;
}
}
function selectNone(){
//获取同一组选项
var sport = document.getElementsByName("sport");
//遍历NodeList,将checked赋值为true
for (let i = 0; i < sport.length; i++) {
sport[i].checked = false ;
}
}
//反选
function selectReverse() {
//获取同一组选项
var sport = document.getElementsByName("sport");
// //遍历NodeList,将checked赋值为true
for (let i = 0; i < sport.length; i++) {
// if(sport[i].checked != true) {
// sport[i].checked = true;
// }else {
// sport[i].checked = false ;
// }
sport[i].checked = !sport[i].checked;
}
}
</script>
<body>
你会的运动项目:
<input type="checkbox" name="sport" value="zq" checked="checked">足球
<input type="checkbox" name="sport" value="tq">台球
<input type="checkbox" name="sport" value="ppq">乒乓球<br>
<button onclick="selectAll()">全选</button>
<button onclick="selectNone()">全不选</button>
<button onclick="selectReverse()">反选</button>
</body>
效果图:
添加图片
代码:
<script type="text/javascript">
function addImg(){
//创建一个html的dom对象(img)
var img = document.createElement("img");
//添加img的属性
img.src = "./img/1.png";
document.body.appendChild(img);
}
</script>
</head>
<body>
<input type="button" onclick="addImg()" value="添加小猫">
</body>
效果图
图片交互
代码:
<script type="text/javascript">
function changeImg() {
//根据value,change图片
var imgs = document.getElementsByTagName("img");
//1,先获得value
var change = document.getElementById("change");
if (change.value == "查看多少小猫,并切换多少小狗") {
change.value = "查看多少小狗,并切换多少小猫";
//切换图片
//1,获取图片数组
//2,遍历数组,更换图片src
for (let i = 0; i < imgs.length; i++) {
imgs[i].src = "./img/" + (i + 4) + ".png";
}
} else if (change.value == "查看多少小狗,并切换多少小猫") {
change.value = "查看多少小猫,并切换多少小狗";
for (let i = 0; i < imgs.length; i++) {
imgs[i].src = "./img/" + (i+1) + ".png";
}
}
}
</script>
<body>
<img src="./img/1.png" height="100">
<img src="./img/2.png" height="100">
<img src="./img/3.png" height="100">
<br>
<input type="button" onclick="changeImg()" value="查看多少小猫,并切换多少小狗" id="change">
</body>
效果图:
节点
快捷键:idea 中 ctrl+home 跳转到行首
idea 中 ctrl+end 跳转到行尾
如果你的笔记本电脑没有 Home 和 End 键,你可以通过按下 Fn(即 Function 键) + 左箭头(即 Home)或 Fn + 右箭头(即 End)来模拟 Home 或 End
常用方法
getElementById(代码)
//查找id = java 节点
//运用动态注册事件
window.onload = function () {
//通过注册按钮的点击事件
var btn01 = document.getElementById("btn01");
btn01.onclick = function () {
//先拿到id=java的dom对象
var java = document.getElementById("java");
alert("java节点的内容为 " + java.innerText);
}
效果图
getElementsByTagName
代码:
//查找所有option节点
var btn02 = document.getElementById("btn02");
btn02.onclick = function () {
//拿到option的dom对象
var option = document.getElementsByTagName("option");
for (let i = 0; i < option.length; i++) {
alert(option[i].innerText);
}
}
效果图
getElementsByName
代码:
//查找name = sport 的结点
var btn03 = document.getElementById("btn03");
btn03.onclick = function () {
var sports = document.getElementsByName("sport");
for (let i = 0; i < sports.length; i++) {
if (sports[i].checked == true) {
alert(sports[i].value);
}
}
}
效果图
childNodes
//返回id = sel01 的所有子节点
var btn05 = document.getElementById("btn05");
//包含text文本
btn05.onclick = function () {
var childNodes = document.getElementById("sel01").childNodes;
for (let i = 0; i < childNodes.length; i++) {
if (childNodes[i].selected) {
alert(childNodes[i].innerText);
}
}
}
<select id="sel01">
<option>---女友---</option>
<option>艳红</option>
<option id="ct" value="春桃菇凉">春桃</option>
<option>春花</option>
<option>桃红</option>
</select>
注意:在查询所有节点时
这里有text文本 —女友—.
只要不是连接在一起换行后默认为text文本.
效果图
firstChild
代码:
//返回id = sel01 的第一节点
var btn06 = document.getElementById("btn06");
btn06.onclick = function () {
var firstChildNode = document.getElementById("sel01").firstChild;
alert(firstChildNode);
效果图:
parentNode
//根据某个结点去拿到父结点
var btn07 = document.getElementById("btn07");
btn07.onclick = function () {
var parentNode = document.getElementById("java").parentNode;
alert(parentNode);
}
效果图
previousSibling nextSibling
代码:
//返回id = ct 的前后兄弟结点
var btn08 = document.getElementById("btn08");
btn08.onclick = function () {
var ct = document.getElementById("ct");
alert(ct.previousSibling);
alert(ct.nextSibling);
}
<option>艳红</option>
<option id="ct" value="春桃菇凉">春桃</option>
<option>春花</option>
注意: 春桃前后都有换行,会被默认认为是 object Text
效果图
innerText
代码:
//设置#person文本域
var btn10 = document.getElementById("btn10");
btn10.onclick = function () {
var person = document.getElementById("person");
person.innerText = "你好JS";
}
效果图:
老韩乌龟吃鸡小游戏
建立方向盘
代码:
<form>
<table border="2px">
<tr>
<td></td>
<td>向上走</td>
<td></td>
</tr>
<!-- 第二行-->
<tr>
<td>向左走</td>
<td></td>
<td>向右走</td>
</tr>
<!-- 第三行-->
<tr>
<td></td>
<td>向下走</td>
<td></td>
</tr>
</table>
</form>
效果图:
添加Turtle和Chicken的图片
代码
<div id="Turtle" style="position: absolute;left: 100px ;top: 100px">
<img src="./img/1.bmp" width="100px" >
</div>
<div id="Chicken" style="position: absolute ;left: 200px;top: 200px">
<img src="./img/2.bmp" width="100px" >
</div>
注意:这里的坐标,是根据窗口的左上角开始定位(absolute绝对定位),left表示图片距离源点横坐标的距离,top表示图片距离源点众坐标的距离
效果图:
总结:
动态事件判断碰撞时会出现传值判断失败问题,无法判断碰撞和弹出弹窗.