第三节 前端基础之JS

1.javaScript简介

JavaScript是一门基于对象和事件驱动的脚本语言。特点为:①动态类型,不用指定变量的类型;②弱类型,一个变量可以赋不同类型的值。

JavaScript组成:ECMAScript、BOM、DOM。

1.1 使用方法

HTML内部JS:script标签可放在head或body标签中。

一般写在head标签中,例如:
<head>
	<script>
		allert("hello js");//表示浏览器顶部弹出提示
		console.log("hello,world"); //表示控制台输出
	</script>
</head>

HTML外部JS:后缀名是“.js”,script标签可放在head标签中或body结束标签前,js文件中不需要写script标签。

先在head标签中引入外部js,例如:
<head>
	<script src="demo.js"></script>
</head>

 

2 基础语法

2.1 变量

通过var关键字声明一个变量;原始数据类型有Number(数字,不区分整数和小数)、String(凡是单引号或双引号包裹的字符)、Boolean(true、false)、Undefined(undefined)、Null(null)。通过typeof 关键字可以判断数据类型。

var num = 100;//数字
var str = "小明"; //字符串
console.log(num);
console.log(typeof num);
console.log(num,typeof num);//与其前面两行结果一样(结合版)

2.2 运算符

2.2.1 算术:+、-、、/、%(取余)、++(自增,放在变量前表示先+1再赋值,而放在后面表示先赋值再+1)、--(自减,原理类似于自增)

2.2.2 赋值:=、+=、-=、/=、%=

num1 += 5 ;//相当于:num1 = num1 + 5

2.2.3 字符串拼接:+

2.2.4 比较:>、<、==(值相同)、===(值和类型相同)、<=、>=、!=(不等于)

2.2.5 逻辑:&&(与)、||(或)、非(!)

2.2.6 条件(三目):条件?表达式1:表达式2;

console.log(num1>num2?"成立":"不成立")

2.3 数据类型转换

2.3.1 隐式转换:

(1)其它转数字:true--1,false--0;undefined--NaN(not a number);null--0;纯数字字符串--数字,非纯数字--NaN。

(2)其它转字符串:直接给变量加引号即可。

(3)其它转布尔:非零数字和非空字符串--true,其余为false。

2.3.2 强制转换:

(1)转为数字:parseInt()、parseFloat()、Number()

转为整数(遇到非数字会停止):parseInt('123dd'),结果:123
转为小数(遇到非数字会停止):parseInt('123.55d'),结果:123.55
转为数字(只用于数字型字符串):Number('123'),结果:123

(2)转为字符串:String()。

(3)转为布尔:Boolean(),非零数字和非空字符串--true,其余为false。

2.4 流程控制语句

顺序结构:从下到下执行

(1)分支语句:

//1.if...else

//2.if...else if...else{} 
if(100>200){
    console.log(true);
}else if(300>400){
    console.log(false);
}else{
    console.log('以上都不满足')
}

//3.switch()
var week = 4;
switch (week){
    case 1:
        console.log('星期一')
        break;
    case 2:
        console.log('星期二')
        break; //如果不加break,则满足对应case值时,该case及其后面case的代码会全部执行,也就是所谓的“穿透性”!
    case 3:
        console.log('星期三')
        break;
    case 4:
        console.log('星期四')
        break;
    case 5:
        console.log('星期五')
        break;
}

(2)循环语句

//1.for循环
for (var i = 0; i < 10; i++) {
    console.log('i:'i);
}
        
//2.while循环
while (j<10){
    console.log('j:'+ j);
    j++;
}

//3.do...while循环,不管条件是否成立,都会执行一次do中的代码。
do{
    var n = 0;
    console.log('n--'+n);
}while (n<10)

 

3.函数

函数就是对一系列代码的封装,实现代码的复用。

3.1 函数的定义、调用、参数、返回值

return会跳出函数,其后面的代码不会执行。

 

4.字符串

length可获取字符串长度;
charAt()可获取下标对应的字符;
indexOf()可获取相应字符的下标位置,如str.indexOf('c');
slice()可截取字符串(左闭右开)不会改变原来的字符串,如:str.slice(1,5) ;

 

5.数组

var arr = [1,2,3,4,5];
// arr.push(33,55,99);//在原数组末尾添加元素,如有多个元素须用逗号隔开
// arr.pop();//删除数组中最后一个元素
// arr.splice(1,3);//下标1开始,删除3个元素
arr.splice(1,0,8);//下标1开始,删除0个元素,将8放入该位置
var re = arr.slice(1,3);//截取下标1~3(不含3)之间的元素,不改变原数组
console.log(arr);
console.log(re);

6.对象

对象就是一系列属性和方法的集合。

6.1 自定义对象

//对象的定义(对象名+属性,多个属性间用逗号隔开)
var dog = {
    name: ' dudu ',
    age: 2,
    color: ' black ',
    shout:function (){
        alert('wangwang...')
    }
}

//对象的访问(对象名+属性)
console.log(dog.name + dog.age);
dog.shout();//方法的访问不需要借助控制台输出

//添加属性(对象名+属性)
dog.height = '50cm'
dog.run = function (){
    alert('i am running')
}
console.log(dog);//显示dog对象的所有属性

//删除属性(delete+对象名+属性)
delete dog.color;

//修改属性值(与添加一样,直接重新赋值就行)
dog.height ='40cm';

//遍历对象的属性(for循环)
//(1)遍历属性(item),结果是:name age shout height run
for(var item in dog){
    console.log(item);
}
//(2)遍历属性值([item]),结果是:dudu 2 函数内容 40cm 函数内容
for(var item in dog){
    console.log(dog[item])
}

6.2 内置对象

//Math对象
var num = 13.5;
console.log(Math.round(num));//取整数,四舍五入
console.log(Math.ceil(num));//向上取整数
console.log(Math.floor(num));//向下取整数
console.log(Math.random());//在0~1(不含1)之间取随机数
//生成一个10以内的随机整数(含10)
console.log(Math.round(Math.random()*10));//组合使用相关函数
//生成一个10以内的随机整数(不含10)
console.log(Math.floor(Math.random()*10));

//Date对象
var date = new Date();//创建时间对象
// console.dir(date);//可列出该对象中的方法
console.log(date);//显示当前时间(GMT格式的时间),结果:Thu Aug 29 2024 17:35:45 GMT+0800 (中国标准时间)
console.log(date.toLocaleString());//显示为当地的时间格式,结果:2024/8/29 17:38:56
console.log(date.getFullYear());//显示当前年份(4位)
console.log(date.getMonth());//月
console.log(date.getDate());//日(不要与星期搞混)
console.log(date.getHours());//时
console.log(date.getMinutes());//分
console.log(date.getSeconds());//秒
console.log(date.getDay());//星期(不要与日搞混)

 

7.BOM

BOM:全称“browser object model”,浏览器对象模型,提供用户与浏览器窗口之间交互的对象和操作的接口。

包括window、history、location、navigator、screen、document

7.1 window的方法

//警告框(window可省略)
window.alert('警告!');
//确认框
var result = confirm('确认提交吗?')//确认则返回true,否则返回false
console.log(result)
//输入框(第一个参数为提示语,第二个为默认值,两个参数都可省略)
var msg = prompt('输入姓名','john');
console.log(msg);

// setInterval(周期执行):会一直执行,直到打断
// 参数1为你的函数,参数2为间隔时间(单位毫秒)
var timeId1 = setInterval(function (){console.log(1)},1000);

//setTimeout(延迟执行):只会执行一次
// 参数1为你的函数,参数2为延迟时间(单位毫秒)
setTimeout(function (){
    clearInterval(timeId1);
    console.log('hello');
},5000);

//clearInterval(清除周期执行):参数为相应周期执行返回的id
// clearInterval(timeId1);
//clearTimeout(清除延迟执行):参数为相应周期执行返回的id
// clearTimeout(timeId2);

7.2 history的方法(了解)

//返回上一个页面
history.back();
//向前一个页面
history.forward();
//。。。
history.go();

7.3 location

href、search、hash、reload()、host、port

//location(浏览器地址栏)
console.log(location.href);//获取地址栏的网址
console.log(location.hash);//获取地址栏井号(#)后面的内容,如#100,用来传递数据信息
console.log(location.search);//获取地址栏问号(?)后面的内容,如?id=10&name=dog
location.reload();//重新加载该页面(刷新),默认会一直加载,一般需配合其它条件使用

7.4 navigator

userAgent:浏览器信息

console.log(navigator.userAgent);

7.5 screen

width,height,availWidth,availHeight,前面2个返回全屏下的浏览器宽高,后面2个返回全屏下的浏览器可用宽高。

console.log(screen.width);
console.log(screen.height);
console.log(screen.availWidth);
console.log(screen.availHeight);

7.6 document

可以在body中写入html代码。

<script>
	document.write('<h1>hello</h1>')
</script>

 

8.DOM

8.1 定义

DOM全称“document object model”,即文档对象模型,对文档的结构化的表述,定义了在程序中对该结构进行访问的方式(访问、增加、删除、修改文档的内容)。

8.2 分类

核心(core)DOM:用于任何结构化文档的标准模型
HTML DOM:用于HTML文档的标准模型
XML DOM:用于XML文档的标准模型

8.3 DOM树

DOM将HTML文档抽象成树形结构,这个树就叫DOM树。HTML中的每项内容(DOM节点)都可在DOM树中找到。

8.4 DOM节点分类

文档节点
元素节点
文本节点
属性节点
注释节点

8.5 获取节点

(1)直接获取元素节点(节点都是对象,拥有属性和方法,可以用一个变量接收)

//通过id
document.getElementById()
//通过类名(如name_first)
document.getElementsByClassName()
//通过标签名(如div/span)
document.getElementsByTagName()

//可以代替上面3个(H5新出的,用法稍有不同,理论更加简单)
document.querySelector()  
//用法(只获取第一个id为box的标签):document.querySelector('#box')

document.querySelectorAll()
//用法(获取所有类名为box的标签):document.querySelectorAll('.box')

(2)通过节点关系获取节点 (node表示某个节点)

parentNode
childNodes //获取的返回值是一个数组,可以通过children[0]显示每个元素
firstChild(firstElementChild) //第一个子节点
lastChild(lastElementChild) //最后一个子节点
previousSibling(previousElementSibling)
nextSibling(nestElementSibling)

8.6 DOM操作 (node表示某个节点)

innerHTML:可获取或设置元素的内容;此外还可以拼接原内容和新内容。
document.createElement():创建一个元素。
node.appendChild():添加一个元素(无引号)。
node.removeChild():移除一个元素(无引号)。

//演示div(下面的例子通用)
<div id="box">
    <p> hello DOM</p>
</div>

//1.innerHTML的使用
<script>
    var box = document.getElementById('box');
    console.log(box);  //结果:<div id="box"><p> hello DOM</p></div>
    console.log(box.innerHTML);  //结果:<p> hello DOM</p>
    console.log(box.innerText);  //结果:hello DOM
    
    //拼接原内容和新内容(使用+=)
    box.innerHTML = '<span>这是旧内容--</span>';
    box.innerHTML += '<span>这是新内容</span>';
</script>

//2.createElement()、appendChild()、removeChild()的使用
<script>
    var box = document.getElementById('box');
    var p = document.createElement('p'); //创建一个p标签
    p.innerHTML = '新建的P标签内的值'; //设置p标签里的内容
    box.appendChild(p); //在box标签中添加该p标签(这个p不要引号哦)
    box.remove(p); //删除了上面添加的p标签,如果有多个p标签,只想删除其中一个,可用.remove(p[i]),其中i是你想删除的那个下标。
</script>

8.7 事件

事件,就是能被JS检测到的活动或动作,好比你的鼠标或键盘的操作及一些状态的变化(页面加载等)。

事件处理函数,就是当活动发生时,响应活动的函数。比如鼠标点击时执行某个动作函数。

事件绑定

node.onclick = function(){ } ,一个按钮绑定多个事件时,前面的都会被覆盖失效。
node.addEventListener('click',function(){ },false) ,一个按钮绑定多个事件时,前后所有的事件不覆盖,都生效。

//演示1
<button id="bt">点击提交</button>

<script>
    var bt = document.getElementById('bt');
    // 用onclick给同一个按钮绑定了多个点击事件,只会执行后面那个
    bt.onclick = function () {
        console.log(1);
    }
    bt.onclick = function () {
        console.log(2);
    }
    // 用addEventListener给同一个按钮绑定了多个点击事件,所有事件都会执行
    bt.addEventListener("click", function (){
        console.log(3);
    })
    bt.addEventListener("click", function (){
        console.log(4);
    })
</script>

//演示2,要求:在输入框中输入文字后,点击按钮可以无序列表的形式展示成todo清单
<ul id="list"></ul>
<input id="inpu" type="text">
<button id="bt">添加</button>

<script>
    var bt = document.getElementById('bt');
    var list = document.getElementById('list');
    var inpu = document.getElementById('inpu');
    bt.onclick = function (){
        var li = document.createElement('li'); //创建li标签
        list.appendChild(li); //添加li标签到list标签中
        li.innerHTML = inpu.value; //将inpu中的值传到li标签中
        inpu.value =''; //清空inpu框
    };
</script>

8.8 事件类型

鼠标事件:onclick(点击,即按下再抬起)、onmouseover(移入)、onmouseout(移出)、onmousemove(移动)、onmousedown(按下)、onmouseup(抬起)
键盘事件:onkeydown(按下)、onkeyup(抬起)、onkeypress(按下抬起)
表单事件:onfocus(聚焦时)、onblur(失去焦点)、onchange(内容改变)、oninput(正在输入)、onsubmit(提交按钮)
状态事件:onload,比如script代码在head中,而html代码在body中时(一般都是上面的代码先执行),此时script代码可能无法获取body中相应的标签,也就无法正常执行下去,用了window.onload后,就可以等html代码全部执行完了再执行script代码,从而保证代码正常执行。(这也就是为什么大部分js文件都默认放在底部的原因)

//window.onload使用方法
<script>
	window.onload = function(){
		//你想要执行的js代码
	}
</script>

8.9 js控制css样式

在DOM节点对象上有一个style对象,管理着这个节点的所有样式,而且这些样式可读、可写。对于两个单词拼成的样式,好比 background-color,在获取或设置时,需要将横线去掉,第二个字母大写,即 backgroundColor。

下面是一个用js控制div移动和暂停的实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM操作</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #box{
            border: 2px solid red;
            width: 150px;
            height: 150px;
            position: relative;
            text-align: center;
            line-height: 150px;
        }
    </style>
</head>
<body>

<div id="box"><h3>js控制css</h3></div>

<script>
    var box = document.getElementById('box');
    var distance = 0;
    var intID =0;
    function move(){
        intID = setInterval(function (){
            distance += 1;
            box.style.left = distance +'px';
        },40)
    };
    //默认方框向右移动
    move();
    //鼠标悬浮时暂停
    box.onmouseover = function () {
        clearInterval(intID);
    }
    //鼠标移开后继续向右移动
    box.onmouseout = function () {
        move(); //重新调用move函数来恢复移动
    }
</script>

</body>
</html>

8.10 事件对象

(1)在事件发生时,会产生一个事件对象(event),该对象包含了事件的状态,比如:事件发生的元素、鼠标的位置、键盘的状态等。

(2)在事件处理函数执行时,事件对象将会由浏览器自动传递给事件处理函数。

演示1,在浏览器可用窗口中创建一个div,鼠标在上面点击时可以拖动该div,鼠标未点击时,则无法拖动该div。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM操作</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #box{
            border: 2px solid red;
            width: 150px;
            height: 150px;
            background: #666;
            position: relative;
            left: 0;
            top: 0;
        }
    </style>
</head>
<body>

<div id="box"></div>

<script>
    var box = document.getElementById('box');
    //在box中按下鼠标执行以下函数
    box.onmousedown = function (ev) {
        //获取鼠标相对于box的位置
        var bx = ev.offsetX;
        var by = ev.offsetY;

        //鼠标在整个浏览器可用窗口中移动
        document.onmousemove = function (e) {
            // box以鼠标的位置为参照进行偏移,这样鼠标在box中的任意地方点击就不会回到box左上角了
            box.style.left = e.clientX - bx + 'px';
            box.style.top = e.clientY - by + 'px';
        }
    }
    box.onmouseup = function () {
        document.onmousemove = null;
    }

</script>

</body>
</html>

(3)事件冒泡,比如:当一个大div中套有一个小div时,如果给两个div都绑定鼠标点击事件,里面那个div的点击事件触发时,外面那个div的点击事件也会触发(这不是我们想要的,因此需要用e.stopPropagation()来阻止外面的事件发生);而外面的div的点击事件触发时,里面那个div的点击事件并不会触发(这个正常)。

(4)阻止默认行为,比如:我们点击a标签时,默认会往它所指的链接跳转,如果要阻止这种行为,我们可以使用event.preventDefault()。

温馨提示
我也是有底线的~
点赞0
评论 抢沙发

请登录后发表评论

    暂无评论内容