WBE前端笔记3:JavaScript练习--基础语法

插入Javascript脚本的三种方式

1.行间事件方式 以及 按钮的onclink和alert

<body>
    <input type="button" value="hello" onclick="window.alert('hello word!!!!!!!')"></input>
</body>

使用上述代码即可实现点击按钮弹出窗口的效果
在这里插入图片描述

2.代码块的方式

    <script type="text/javascript">
        window.alert("hello")
    </script>

执行上述代码,打开网页就会显示弹窗
在这里插入图片描述

3.外部文件的方式

创建js文件夹并在其中创建hello.js
在内部写入代码

window.alert("hello kitty");

然后在html中调用

<body>
    <script type="text/javascript" src="js/hello.js"></script>
</body>

运行后结果为
在这里插入图片描述

4.函数

编写如图所示代码

<body>
		<input type="button" onclick="sayhello('wwwww')" />
		<script type="text/javascript">
			function hanshu(a,b){
				window.alert(a+"?"+b);
			}
			hanshu("abc",true);
			hanshu();
			hanshu(1);
			hanshu(1,2);
			hanshu(1,2,3);
			// 第二种声明方式
			mysum=function(a,b){
				return a+b;
			}
			var res=mysum(10,20);
			window.alert(res);
			
			function sayhello(a){
				window.alert("hello!!!"+a);
			}
		</script>
	</body>

执行结果为:
在这里插入图片描述

全局变量与局部变量相较于java不同的地方

		<script type="text/javascript">
			function sayhello(){
				p="asdadasd";
			}
			sayhello();
			window.alert(p);
		</script>

调用结果为
在这里插入图片描述
在JavaScript中不使用var关键字进行声明的变量,都为全局变量

js中的函数是不能重载的

函数若重名 后声明的会覆盖前面的

数据类型

number

NaN

在js脚本运行数学运算时,若结果不是数字,则会返回nan
例如

	<body>
		<script type="text/javascript">
			var res = 199/"http";
			window.alert(res);
		</script>
	</body>

在这里插入图片描述

infinity

无穷大 在js中计算 100/0时变量中的值将为infinity

isNaN函数

isNaN会判断传入参数是否为数字
如果不是数字 返回true
是数字,返回flase
特殊的bool型的数据使用isNaN也会被判定为数字

number函数

number函数会将传入的参数

<body>
    <script>
        var i=Number("123456");
        window.alert(typeof(i));
    </script>
</body>

结果为:
在这里插入图片描述

parseInt函数

使用parseInt可以将其他数据类型暴力取整

<body>
    <script>
        var i=Number("123456.999");
        window.alert(parseInt(i));
    </script>
</body>

<body>
    <script>
        var i=Number("123456qwe");
        window.alert(parseInt(i));
    </script>
</body>

运行结果都是:
在这里插入图片描述

Math.ceil函数

此函数作用与parseInt类似 与之不同的是,此函数是向上取整

特殊

js中10/3不是3 而是3.3333333

Boolean类型

boolean只有ture和false两个值

Boolean函数

此函数会将任意类型的数据转换为Boolean类型
在这里插入图片描述
Boolean在js中会被隐式调用
下面两种方式是等价的

        if(Boolean("asd")){

        }
        if("abc"){
            
        }

string类型

常用属性和方法

<body>
		<script type="text/javascript">
			console.log("abcdef".length);//6
			console.log("qwerty".charAt(3))//r
			console.log("qwe".concat("rty"))//qwerty
			console.log("a=b&b=c".indexOf("="))//1
			console.log("a=b&b=c".lastIndexOf("="))//5
			console.log("1-1-501".replace("-",","))//1,1-501(只能替换第一个)
			var arr = "1-1-501".split("-");//拆分字符串 //不需要使用var[]
			for(var i=0;i<arr.length;i++){
				console.log(arr[i]);
			}
			
			console.log("abcdefg".substr(2))//cdefg
			console.log("abcdefg".substring(2))//cdefg
			
			//在参数为两个时
			//substr为(start,len)
			//substring为(start,end)(不包括end)
			console.log("abcdefg".substr(2,3))//cde
			console.log("abcdefg".substring(2,3))//c
			
			console.log("Abc".toLowerCase())//abc
			console.log("Abc".toUpperCase())//ABC
		</script>
	</body>

Object

与java相同,可以把Ovject类型看成是所有类的基类
Object对象其中最重要的是它的prototype属性
它可以动态的给类扩展方法和属性
例如

		<script type="text/javascript">
			var obj = new Object();
			Object.prototype.mytest = function(){
				console.log("test success");
			}
			obj.mytest();
			Object.prototype.username="zhangsan";
			console.log(obj.username)
		</script>

上述代码结果为
在这里插入图片描述

<script type="text/javascript">
			/*js中定义类
			第一种方法:
				function 类名(形式参数列表){
					this.属性名 = 参数
					this.属性名 = 参数
					
					this.方法名 = function(){
						
					}
				}
			第二种方法:
				类名 = function(形式参数列表){
					this.属性名 = 参数
					this.属性名 = 参数
					
					this.方法名 = function(){
						
					}
				}*/
			//sayHello既是函数,也是类,取决于如何调用
			function sayHello(){
				
			}
			//这样调用是当作函数调用,不会在堆中new对象
			sayHello();
			//new 来调用 就是当作类来调用,会在浏览器的堆中开辟新对象
			var obj= new sayHello();
		</script>

示例(员工类):

			function Emp(empno,ename,sal){
				//属性
				this.empno=empno;
				this.ename=ename;
				this.sal = sal;
				//方法
				this.work=function(){
					console.log(ename+"working.....");
				}
			}
			
			//创建对象
			var v1=new Emp();
			v1.work();
			
			var v2=new Emp(1);
			v2.work();
			
			var v3=new Emp(1,"zhangsan");
			v3.work();
			
			var v4=new Emp(1,"zhangsan",900);
			v4.work();
			
			console.log("第一种方式"+v4.sal);
			//另一种引用方式
			console.log("第二种方式"+v4["sal"])
			
			//给emp动态添加方法
			Emp.prototype.getSal=function(){
				return this.sal;
			}
			
			console.log(v4.getSal());

运行结果:
在这里插入图片描述

= =和= = =

===相当于java里的equals,即比较数据是否相等,又比较数据类型是否一致
==则只比较值是否相等
var v1=true;
var v2=1;
console.log(v1==v2);//true
console.log(v1===v2);//flase

null NaN 和undefined区别

null == undefined 但数据类型不同
NaN与任何都不能等同

javaScript 事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
load事件(在页面加载完毕之后触发)
<body onload="console.log('加载完毕')">
    焦点事件:<input type="text" onblur="console.log('失去焦点')" onfocus="console.log('获得焦点')">
    <br>
    单击事件:<input type="button" onclick="console.log('单击')" value="单击">
    <br>
    双击事件:<input type="button" ondblclick="console.log('双击')" value="双击">
    <br>
    按键事件:<input type="text" onkeydown="console.log('按键按下')" onkeyup="console.log('按键抬起')">
    <br>
    鼠标相关事件
    <div style="border: 1px solid black; width: 300px; height: 300px;"onmouseover="console.log('鼠标经过了')"
                                                                        onmousemove="console.log('鼠标在div内移动了')"
                                                                        onmouseout="console.log('鼠标离开了')"
                                                                        onmouseup="console.log('鼠标弹起了')"
                                                                        onmousedown="console.log('鼠标按下了')"
                                                                        ></div>
                                                                        <br>
    表单事件
    <form onsubmit="alert('表单提交了')" onreset="console.log('表单重置了')">
        <input type="submit" value="提交">
        <input type="reset"  value="重置">
    </form>
    <br>
    选中文本事件和修改事件
    <input type="text"  onselect="console.log('文本被选中了')" onchange="console.log('文本被修改')"></textarea>
    <br>
    <select onchange="console.log('选项被修改')"> 
        <option value="">请选择您的学历</option>
        <option value="bk">本科</option>
        <option value="zk">专科</option>
    </select>
</body>
</html>

ECMAScript DOM BOM

ECMAScript是javaScript的语法核心
DOM是组件如按钮,表格等,在js中 document是表示DOM组件
BOM是所有浏览器操作 如弹窗等 在js中使用window表示

事件注册

事件注册有两种方式
第一种就是直接在元素中通过onclick声明
第二种

<body>
    <input type="button" id="mybutton1" value="button1"/>
    <input type="button" id="mybutton2" value="button2"/>
    <script type="text/javascript">
        function t1(){
            console.log("1111");
            window.alert("t1被调用了");
        }
        var b1=document.getElementById("mybutton1");
        b1.onclick=t1;
        console.log(b1);
        var b2=document.getElementById("mybutton2");
        b2.onclick = function (){
            console.log("2222");
            window.alert("匿名函数被调用了")
        }
        console.log(b2);
    </script>
</body>

代码的执行顺序

在使用DOM获取元素时要注意脚本要写在元素声明之后

<body>
    <script type="text/javascript">
           var bt = document.getElementById("bt");
           bt.onclick = function(){
               alert("匿名函数");
           }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

像上面这样的代码,因为先执行的脚本,导致bt对象为null,此时修改顺序即可解决问题

或者也可以将代码改为下面这种写法

<body onload="load()">
    <script type="text/javascript">
        function load (){
            var bt = document.getElementById("bt");
            bt.onclick = function(){
                alert("匿名函数");
            }
        }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

或者

<body>
    <script type="text/javascript">
        window.onload=function(){
            var bt = document.getElementById("bt");
            bt.onclick = function(){
                alert("匿名函数");
            }
        }
    </script>
    <input type="button" id="bt" value="BUTTON"/>
</body>

键盘监听

上面提到了一系列键盘监听事件,我们可以通过以下代码获取得到的按键

	<body>
		<input type="text" id="username"/>
		<script type="text/javascript">
			function DL (a){
				if(a.keyCode==13){
					console.log("点击了enter");
				}
			}
			window.onload=function(){
				var username = document.getElementById("username");
				username.onkeypress=DL;
			}
		</script>
	</body>

	<body>
		<input type="text" id="username"/>
		<script type="text/javascript">
			window.onload=function(){
				var username = document.getElementById("username");
				username.onkeypress=function(a){
					if(a.keyCode==13){
						console.log("点击了enter")
					}
				}
			}
		</script>
	</body>

练习 移动方块

	<body id="body">
		<div id="person" style="width: 10px; height: 10px; position: absolute; left: 50px; top: 50px; background-color: #2F2D2E;"></div>
		<script type="text/javascript">
			window.onload=function(){
				person = document.getElementById("person");
				body = document.getElementById("body");
				speed = 1.0;
				last_key='q';
				window.onkeydown=function(data){
					
					var y=parseInt(person.style.top);
					var x=parseInt(person.style.left);
					if (last_key==data.key){
						speed=speed+0.5;
					}
					else {
						speed=1;
					}
					last_key = data.key;
					if(data.key=='w'&&y>30){
						y=y-speed;
						person.style.top=y+'px';
					}
					if(data.key=='s'&&y<window.innerHeight-30){
						y=y+speed;
						person.style.top=y+'px';
					}
					if(data.key=='a'&&x>30){
						x=x-speed;
						person.style.left=x+'px';
					}
					if(data.key=='d'&&x<window.innerWidth-30){
						x=x+speed;
						person.style.left=x+'px';
					}
				}
			}
		</script>
	</body>

void运算符

void运算符的用法是 void(表达式)
那么表达式返回的将返回空值
假如我们想有一个超链接样式的文本,单击后执行js代码,并且在执行完js代码后不跳转页面。
我们就可以这样写

<body>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

    <a href="javascript:void(0)" onclick="alert('link')" >
        dlaks;lkalskdl;akdl;ak;l
    </a>    
</body>

如果写成href=""那么单击相当于访问当前页 ,不符合要求

array 数组

<body>
    <script type="text/javascript">
        var a=[];
        a.push(5);
        a.push(6);
        a.push(7);
        console.log(a.length);// 3
        console.log("pop"+a.pop());//pop7
        console.log(a.length);//2
        /****push和pop符合栈的特点*****/

        var b = new Array(2001,1,1);
        var str = b.join("_");
        console.log(str); //2001_1_1

        var c=[9,8,7,true,false];
        c.reverse();
        for(var i in c){
            console.log(c[i]); //false true 7 8 9
        }
    </script>
</body>

date对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        var time=new Date();
        console.log(time);//Sun Dec 05 2021 14:57:56 GMT+0800 (中国标准时间)
        year = time.getFullYear();
        month = time.getMonth();
        //day = time.getDay(); 这样获取到的是星期几
        day = time.getDate();
        console.log(year+"年"+month+"月"+day+"日");//2021年11月5日

        var strDate = time.toLocaleDateString();
        var strtime = time.toLocaleTimeString();
        var strDateTime = time.toLocaleString();
        console.log(strDate); //2021/12/5
        console.log(strtime); //下午3:05:30
        console.log(strDateTime); //2021/12/5 下午3:05:30

        //获取1970-1-1 0:0:0到现在的总毫秒数
        var now = new Date();
        var timeMilis = now.getTime();//1638688162376
        console.log(timeMilis);
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值