JavaScript(新手必看!)

1、什么是JavaScript

1.1 概述

JavaScript是世界上最流行的脚本语言

Java、JavaScript无关

一个合格的后端人员,必须要精通JavaScript

1.2 历史

ECMAScript理解为JavaScript的一个标准

最新版本已经是es6

大部分浏览器只支持es5

开发环境---线上环境,版本不一致

2、快速入门

2.1、引入JavaScript

内部标签

<script>
//...
</script>

外部引入

<script src="..."></script>

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
​
<!--    <script>-->
<!--        alert("Hello World!");-->
<!--    </script>-->
​
    <script src="js/qj.js"></script>
​
</head>
<body>
​
</body>
</html>

2.2 基本语法引入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
​
    <script>
        var num=1;
        var num1=2;
        if (num>num1){
            alert("fales");
        }else{
            alert("ture");/*弹窗*/
        }
/*
* console.log(10);控制台输出
* */
    </script>
</head>
<body>
​
</body>
</html>

image-20240319110719555

2.3 数据类型

数值,文本,图形,视频,音频...

number:

整数(123),浮点数(12.3),科学计数法(1.2e3),负数(-123)NaN(not a number)

Infinite (无限大)

字符串、布尔、逻辑运算、比较运算(“===”绝对等于,JavaScript中“==”,类型不一样,也可能等于“1”和“ ‘1’ ”)

......跟java大差不差

null:空

undefined:未定义

数组

js可以不同类型

var date=[1,'2',null,undefined,"asdf"] 推荐
new Array(1,2,3,"hello");

取数组下标,如果越界,则显示

undefined

对象

var person={
    name:"twd",
    age:19,
    sex:'男'
}

2.4 严格检查模式

<script>
    "use strict";/*严格检查模式,预防javascript的随意性导致产生一些问题
                    必须写在第一行*/
/*  i=1 全局变量*/
    let i=1;
/*ES6 let*/
</script>
​

3、数据类型

3.1 字符串

1.普通字符

console.log("123123")

2.unicode

\u### Unicode字符

3.多行字符串编写

<script>
    /* Tab 上面的符号 ,可以存放多行文本*/
    var msg = `
    fysyyds
    你好
    为什么`
    console.log(msg);
</script>

4.模板字符串

<script>
    "use strict"

    let name = "twd";
    let age=19;
    let msg=`
    ${name},生日快乐`
</script>

5.字符串长度

console.log(msg.length)

6.字符串的可变性:不可变

7.大小写转换

//这是方法,不是属性
student.toUpperCase()
student.toLowerCase()

8.student.indexOf('a') 获取a在student里面的下标

9.substring

[)
student.substring(1)//从第一个字符截取到最后一个字符
student.substring(1,3)1,3中间,不包含3

3.2 数组

Array可以包含任何数据类型

var arr=[1,2,3,4,5];

1、长度

arr.length

2、indexOf,通过元素获得下标

arr.indexOf(2)
1

3、slice()截取Array的一部分,返回一个新数组,类似于substring

4、push,pop

push;尾部新增
pop:删除尾部

5、unshift(),shift()头部

unshift:头部插入
shift:头部删除

6.排序sort()

arr.sort()
(3) [0, 1, 2]

7、元素反转reverse()

arr.reverse()
(3) [2, 1, 0]

8、concat()

rr.concat(['a','a','a'])
(6) [2, 1, 0, 'a', 'a', 'a']
arr
(3) [2, 1, 0]

注意,原数组并未改变

9、连接符jion

打印拼接数组,使用特定的字符串链接

arr.join('+')
'2+1+0'

10、多维数组

arr=[[1,2],[3,4]]

......

3.3 对象

1.若干个键值对

var 对象名 = {
	属性名:属性值,
	属性名:属性值,
	属性名:属性值
}
var person={
            name:"twd",
            age:19,
            sex:'男',
            email:123456
        }

2.赋值 person.name="123123"

3.动态删减属性

delete person.name

4.动态增加属性

person.tel = "123123"

5.判断属性值是否在对象中!‘xxx’ in xxx

'age' in person
true
'asdfasdf' in person
false
'toString' in person
true

6、判断一个属性是否自身拥有的hasOwnProperty()

person.hasOwnProperty(toString)
false

3.4 流程控制

if...else判断,跟Java一样

while(){ } do{ }while()

for循环

for (let i = 0; i < ; i++) {
    
}

forEach

数组名.forEach()

for (变量 in 对象){}

3.5 Map和Set

Map:

<script>
    var map=new Map([["twd",100],["qwe",123]]);
    var name =map.get("twd");//通过key获得value
    map.set(["qwe",124]);
	map.delete("qwe");
    console.log(name);
</script>

Set:无序不重复的集合

set.add(2);
set.delete(2);
console,log(set.has(3));

3.6 inerator

for of 遍历 for in 遍历下标

var arr = [1,2,3]
for (var number of arr) {
    console.log(number)
}

4、函数及面向对象

4.1 函数定义

定义方式一

绝对值函数

function abs(x){
	if(x>=0)
	return x;
	else return -x;
}

如果没有执行return 则返回undefined

定义方式二

var abs = function(x){
}

function(x){...} 匿名函数,可以赋值给abs,通过abs可以调用

JavaScript可以传递任意个参数,也可以不传

可以抛出异常来规避不传:

<script>
    function abs(x){
        if(typeof x!=="number")
            throw 'Not a number';
        if(x>=0)
            return x;
        else return -x;
    }
</script>

arguments 遍历传递所有参数,JavaScript赠送的关键字

<script>
    function abs(x){
        for (let i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
        if(x>=0)
            return x;
        else return -x;
    }
</script>

rest

ES6新特性,获取以定义的参数之外的参数 ...

aaa(1,2,3),输出3

<script>
    function aaa(a,b,...rest){
        if(arguments.length>2)
        for (let i = 2; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
    }
</script>

写在最后面,用...隔开

4.2 变量的作用域

未定义错误:

function qj(){
	var x=1;
}
	x=2;

内部可以访问外部

function aaa(){
	var x=1;
	function bbb(){
		x=2;
	}
}

提升变量的作用域

function qj(){
	var x = 'x'+y;
	console.log(x);
	var y = 'y';
}//输出:xundefined 并不是未定义

js执行引擎,自动提升了y的声明,但不会提升y的赋值,所以一般所有变量放在头部定义

alert本身也是window的一个变量

<script>
    var x='xxx';
    alert(x);
    alert(window.x);
</script>

Javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用域里找到,就会向外查找,在全局作用域也没有找到,报错RefrenceError

//唯一全局变量
var fysyyds = {};
//定义全局变量
fysyyds.name='fys';
fysyyds.add=function (a,b){
    return a+b;
}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突问题

jQuery

局部作用域let

<script>
    for (var i = 0; i < 100; i++) {
    }
    console.log(i);
</script>//输出了100,用let就不会

建议使用let定义局部作用域

常量const

const var PI = 3.14;

在ES6之前,默认大写变量视为常量,没有const

4.3 方法

方法定义

<script>
    var fysyyds={
        name:'fys',
        birth:'2020',
        age:function (){
            var now=new Date().getFullYear();
            return now-this.birth;
        }
    }
</script>

跟java一样

<script>
    function getAge(){
    var now=new Date().getFullYear();
    return now-this.birth;
}
    var fysyyds={
        name:'fys',
        birth:'2020',
        age:getAge
    }
</script>

可以拆开

apply

在js中可以控制this指向,apply所有函数都继承

<script>
    function getAge(){
    var now=new Date().getFullYear();
    return now-this.birth;
}
    var fysyyds={
        name:'fys',
        birth:'2020',
        age:getAge
    };
​
    getAge.apply(fysyyds,[]);//this指向fysyyds,参数为空
​
</script>

5、内部对象

标准对象

typeof 123 'number' typeof '123' 'string' typeof true 'boolean' typeof NaN 'number' typeof [] 'object' typeof {} 'object'

typeof a

’function‘

5.1 Date

基本使用

<script>
    let date = new Date();
    date.getFullYear();
    date.getMonth();
    date.getDate();
    date.getDay();
    date.getHours();
    date.getMinutes();
    date.setDate();
    date.getTime();//时间戳

</script>

5.2 Json

什么是Json

  • JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式

  • 简洁和清晰的层次结构

  • 易于机器解析和生成,并有效地提升网络传输效率

在JavaScript中一切皆为对象,任何js支持的类型都可以用Json来表示

格式:

  • 对象都用{}

  • 数组都用[]

  • 所有的键值对都使用 key:value

JSON字符串和js对象的转换

<script>
    var fysyyds = {
        name:'fys',
        age:'20',
        sex:'男'
    }

    // 对象转换成Json
    let json_fysyyds = JSON.stringify(fysyyds);
    //json字符串转换为对象 ,参数为Json字符串
    let parse = JSON.parse({"name":"fys","age":"20","sex":"男"});
    
</script>

JSON和JS对象的区别

console.log(fysyyds)
VM92:1 {name: 'fys', age: '20', sex: '男'}

console.log(json_fysyyds)
VM193:1 '{"name":"fys","age":"20","sex":"男"}'

5.3 Ajax

  • 原生的js写法 xhr异步请求

  • jQuey封装好的方法 $("#name").ajax("")

  • axios请求

6、面向对象编程

6.1 什么是面向对象

JavaScript,Java,C#...JavaScript的面向对象有些区别!

  • 类:模板

  • 对象:具体的实例

原型:

<script>
    var Student={
        name: 'fysyyds',
        age:5,
        run:function (){
            console.log(this.name+"run...")
        }
    };
    var xiaoming = {
        name : "xiaoming "
    };
    //找原型对象 小明的原型是student
    xiaoming.__proto__=Student;
​
</script>

class关键字,是在ES6引入的

1.定义一个类,属性,方法

<script>
    function Student(name){
        this.name=name;
    }
    //给student新增一个方法
    Student.prototype.hello=function (){
        alert('Hello')
    }
    //ES6之后
    class Student{
        //构造器
        constructor(name){
            this.name=name;
        }
        hello(){
            alert('hello');
        }
    }
</script>
var xiaoming =new Student("xiaoming ");

2.继承extends

<script>
    //ES6之后
    class Student{
        //构造器
        constructor(name){
            this.name=name;
        }
        hello(){
            alert('hello');
        }
    }
    class primary extends Student{
        constructor(name,grade) {
            super(name);
            this.grade=grade;
        }
        myGrade(){
            alert(name+grade+'我是一个小学生');
        }

    }
    
    var xiaoming =new Student("xiaoming ");
    var xiaohong=new primary("xiaohong",'xiaoxuesheng')

</script>

查看对象原型

image-20240326221429211

原型链

__ Proto __

7、操作BOM对象(重点)

浏览器介绍

JavaScript和浏览器的关系?

JavaScript诞生就是为了能够让他在浏览器中运行

BOM:浏览器对象模型

  • IE 6-11

  • Chrome

  • Safari

  • FireFox

  • Opera

三方

  • QQ浏览器

  • 360浏览器

window

window代表 浏览器窗口

window.alert(1)
undefined
window.innerHeight
470
window.innerWidth
406
window.outerHeight
835
window.outerHeight
835
//显示浏览器窗口大小

Navigator

Navigator,封装了浏览器的信息

navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
navigator.platormf

大多数时候,不使用navigator对象,因为会被人为修改!

不建议使用这些属性来判断和编写代码

screen

操作屏幕

screen.width
1707
screen.height
1067

location

location代表当前页面的URL信息

host: "new-tab-page"
href: "chrome://new-tab-page/"
protocol: "chrome:"
reload: ƒ reload()//刷新网页
//设置新的地址
location.assign('http://4399.com')//访问当前网站都会跳转到这里

document

document 代表当前的页面,HTML DOM文档树

document.title='fysyyds'
'fysyyds'

获取具体的文档树节点

<dl id="km">
    <dt>fys</dt>
    <dd>yyds</dd>
    <dd>668</dd>
</dl>
<script>
    var dl = document.getElementById('km');
</script>

获取cookie

document.cookie

劫持cookie原理

www.taobao.com

<script src="aa.js"></script>
//恶意人员获取到你的cookie上传到他的服务器上

服务器端可以设置cookie:httpOnly

history

history.back()
history.forward()
//后退前进

8、操作DOM对象(重点)

DOM:文档对象模型

核心

浏览器网页就是一个Dom树形结构

  • 更新:更新Dom节点

  • 遍历dom节点:得到Dom节点

  • 删除:删除一个Dom节点

  • 添加:添加一个新的节点

要操作一个Dom节点,就要先获得这个Dom节点

获得Dom节点

<script>
    //对应css选择器
    var h1 = document.getElementsByTagName('h1');
    var p1 = document.getElementById('p1');
    var p2 = document.getElementsByClassName('p2');
    var father = document.getElementById('father');
​
    var childrens=father.children;//获取父节点下的所有子节点
​
</script>

这是原生代码

更新节点

<div id="id1">

</div>
<script>
    var id1 = document.getElementById('id1');
    id1.innerText='abc';
</script>

操作文本

  • id1.innerText=456

  • id1.innerHTML='qwe'

操作JS

id1.style.color='red'
id1.style.fontSize='200px'
id1.style.padding='2em'

删除节点

删除节点:先获取父节点,再找到自己的节点删除

<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
</div>
    <script>
        var self = document.getElementById('p1');
        var father = self.parentElement;
        father.removeChild(p1);
​
        //删除是一个动态的过程
        father.removeChild(father.children[0]);
        father.removeChild(father.children[1]);
        father.removeChild(father.children[2]);
    </script>

注意:删除多个节点的时候,childen是在时刻变化的,删除节点的时候要注意

插入节点

我们获得某个DOM节点,假设这个dom节点是空的,我们通过innerHTML就可以增加一个元素,当此DOM界定啊已存在元素了,我们就不能这么干了,会产生覆盖。

追加appendChild

   <p id="js">JavaScript</p>
<div id="list">
    <p id="se">javaSE</p>
    <p id="ee">javaEE</p>
    <p id="me">javaME</p>
</div>
    <script>
        var js=document.getElementById('js');
        var list=document.getElementById('list')
    </script>

image-20240401131627474

创建一个新的标签

<script>
    //通过JS创建一个新的节点
    var newP=document.createElement('p')
    newP.id='newP';
    newP.innerText='fysyyds';
    list.appendChild(newP);
//创建一个标签节点
        var myScript=document.createElement('script');
        myScript.setAttribute('type','text/javascript')
</script>

insert

<script>
    var ee=document.getElementById('ee');
    var js=document.getElementById('js');
    //要包含的节点.insertBefore(newNode,targetNode)
    list.insertBefore(js,ee)
</script>

9、操作表单

获得要提交的信息

<body>
<form action="post">
    <span>用户名:</span><input type="text" id="username">
    <p>
        <span>性别:</span>
        <input type="radio" name="sex" value="man" id="boy">男
        <input type="radio" name="sex" value="women" id="girl">女
    </p>
</form>
<script>
    //获取值
    var input_text = document.getElementById('username')
    var boy_radio=document.getElementById('boy');
    var girl_radio=document.getElementById('girl');
    //修改值
    input_text='123'
    //查看返回结果是否为true
    boy_radio.checked;
</script>
</body>

提交表单 md5加密密码 表单优化

<!--表单绑定提交事件-->
<!--οnsubmit=绑定一个提交检测的函数,true false
将这个结果返回表单,使用onsubmit接受-->
<form action="https://www.baidu.com/" method="post" οnsubmit="return aaa()">
    <p><span>用户名:</span><input type="text" id="username" name="usernme"></p>
    <p><span>密码:</span><input type="password" id="input-password"></p>
​
    <input type="hidden" id="md5-password" name="password">
<!--    绑定事件οnclick=""-->
    <button type="submit">提交</button>
</form>
​
<script>
    function aaa(){
        var uname = document.getElementById('username');
        var pwd = document.getElementById('input-password');
        var md5pwd = document.getElementById('md5-password');
​
        md5pwd.value = md5(pwd.value);
        //可以校验提交表单内容
        return true;
​
        // console.log(uname.value);
        // console.log(pwd.value);
      
        // //MDS算法
        // pwd.value=md5(pwd.value);
        // console.log(pwd.value);
    }
</script>

10、jQuery

jQuery是一个库,集成大量JavaScript函数

获取jQuery

<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>-->
    <script src="lib/jquery-3.7.1.js"></script>
</head>
<body>
​
<!--
公式:$(selector).action()
-->
​
<a href="" id="test-jQuery">点我变长</a>
<script>
    //选择器就是css里面的选择器
    $('#test-jQuery').click(function (){
        alert('hello,jQuery');
    })
</script>
​
</body>

选择器

<script>
  //原生js,选择器少,麻烦不好记
  //标签
  document.getElementsByName();
  //id
  document.getElementById();
  //类
  document.getElementsByClassName();
​
  //jQuery css里的选择器全都能用
  $('p').click();//标签选择器
  $('#id1').click();//id选择器
  $('.class1').click();//class选择器
​
</script>

工具文档站:jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm

事件

鼠标事件,键盘事件

<script src="lib/jquery-3.7.1.js"></script>
    <style>
        #divMove{
            width: 500px;
            height: 500px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<!--获取鼠标当前坐标-->
mouse : <span id="mouseMove"></span>
<div id="divMove">
    在这点击试试
</div>
​
<script>
    //当网页元素加载完毕之后,响应事件
    $(function (){
        $('#divMove').mousemove(function (e){
            $('#mouseMove').text('x:'+e.pageX+'y:'+e.pageY)
        })
    })
</script>

操作DOM

文本节点操作

$('#test-u1 li[name=Python]').text();//获得值
$('#test-u1 li[name=Python]').text('设置值');//设置值
$('#test-u1').html();//获得值
$('#test-u1').html('<strong>123</strong>');//设置值

css的操作

$('#test-u1 li[name=Python]').css("color","red")

元素的显示和隐藏:本质display=none;

$('#test-u1 li[name=Python]').show()//显示
$('#test-u1 li[name=Python]').hide()//隐藏

优站:Layer弹窗组件、Element-ui

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值