插入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>