JavaScript

什么是JavaScript

1、 概述
JavaScript 是一门世界上最流行的脚本语言。
== 一个合格的后端人员,必须精通JavaScript。==

基本使用及HelloWorld

内部标签:

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

外部标签:
abc.js

//.....

.html

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

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- script标签内写js代码 -->
    <!--<script>
        alert("Hellow,World!")
    </script>-->
    <script src="js/qg.js"></script><!--script标签 必须成对出现-->
    <script type="text/javascript"></script><!--不写type 也是默认的-->
</head>
<body>

<!-- 这里也可以存放J -->
</body>
</html>

基本语法入门

<!--js严格区分大小写-->
  <script>
    // 定义变量
    var  num = 70;
    var name= "hua";
    "helloword";

    // 条件控制
    if(num>90 && num <100){
      alert("90 ~ 100")
    }else if(num<90 && num>60){
      alert("60 ~ 90")
    }else {
      alert("other");
    }
    //console.log(变量)  在浏览器控制台  打印变量
  </script>

数据类型

数值,文本,音频,视频,图形。。。
number
js不区分小数和整数

123//整数123
123.1//浮点数
1.123e3//科学计数法
-99//复数

字符串
‘abc’ “abc”

布尔值
true , false
逻辑运算
&& 、 ||、 |
比较运算符
1=
2==(类型不一样,值一样)
3===绝对等于(类型一样结果一样)
这是js一个缺陷 坚持不用2比较

  • NaN,这个与所有数值都不相等,包括自己
  • 只能通过isNaN(NaN)来判断这个数是NaN

浮点数问题:

      console.log(1/3===1-2/3);//false
      console.log(Math.abs(1/3===1-2/3)<0.000001)//true

尽量避免使用浮点数进行运算,存在精度问题
null 和 undefined
数组

      var arr = [1,2,3,'hello',true,null];
      new Array(1,2,3,'hello',true);

取数组下标如果越界了就会显示undefined
对象
对象是大括号,数组是中括号

var Person = {
        name : 'hua',
        age :10,
        tags : [1,2,343,2324,23]
      }

严格检查格式

  <script>
      'use strict'; //严格检查模式,预防js的随意性导致产生的一些问题  如下 i=1
                    //必须卸载第一行  仅ES6及以上版本支持
                    //局部变量建议使用let定义
      //全局变量
      i=1;
      //局部变量
      let i1 = 2;//ES6 let
    </script>

字符串类型

正常字符串我们使用"" ''包裹
注意转义字符
’ \t \n \u####(Unicode字符) \x41(Ascll字符)
多行字符编写

var str =`
hello
word
你好
`

模板字符串

var name ="hua"
let n = `你好呀,${name}`

字符串长度

var str ='';
str.length

字符串是不可变的
大小写转化

str.toUperCase()
str.toLowerCase()
str.indexOf("t")
str.substring(1)//1到结束
str.substring(1,3)//1-2

数组类型

Array可以包含任意的 数据类型

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

长度

arr.length//给arr.length赋值,数组大小就会变化,如果赋值过小元素就会丢失

indexOf(), 通过元素获得小标索引

arr.indexof(2);//1    字符串的2和数字的2不同

slice() 截取Array的一部分 返回一个新数组 类似于subString
push(),pop() 尾部

arr.push('a'); //arr=[1,2,3,4,5,'a'] 返回值类型是数组长度
arr.pop();//arr=[1,2,3,4,5] 返回值为'a'

unshift() , shift() 头部 对应push() 和 pop()
排序sort()
元素反转

arr.resverse(); //即反着输出

连接符join() 打印拼接数组,使用特定的字符串连接

arr.join('-');//"1-2-3-4-5"

多维数组

对象类详解

对象 : 若干个键值对

var Person{
	name : "hua",
	age : 22,
	score : 100
}

函数

定义方式一:绝对值函数

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

一旦执行return 代表函数结束,返回结果!
定义方式二:

var abc = function(x){//匿名函数
	if(x>0){
		return x;
	}else{
		return -x;
	}
}

调用函数=>可以传任意个参数,也可以不传参数

abs(10);//10
abc(-10);//-10

如果不存在参数如何规避{

if(typeof x!== Number){ throw 'Not A Number!'}

arguments
arguments是一个免费赠送的关键词

function abs(x){
            for (let i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
            if(x>0){
                return x;
            }else{
                return -x;
            }
        }
     //打印传入的参数 返回第一个绝对值

rest ES6新特性:获取已经定义的参数之外的所有参数

function abc(a,b,...rest){
  console.log(rest)
   }

rest参数只能写在最后面,必须用…标识

变量的作用域

变量的查找其实是双亲委派机制(向上查找的记过) 由内而外的查找
变量 的定义放在前面,不要乱放,便于代码的维护

  • 全局对象window (所有全局的方法,变量 都可以用window来调用)
    当我们使用了相同的全局变量
//唯一全局变量
var hua = {}
//定义全局变量
hua.name="huazi";
hua.add = function(a,b){
	return a+b;
}
  • 局部作用域let
    使用let在循环外就不能再使用let 定义的变量
function (){
	forvar i=0;i<100:i++{
		
	}
	console.log(i+1);//这里的i继续上边的相加
}
  • 常量const
    之前定义常量用var 大写变量名 但实际可以改变值
const PI =3.14;

方法

就是把函数放在对象中,对象只有两个东西:属性和方法

   "user strict";
   var person = {
     name : "hua",
     birth : 1999,
     //方法
     age : function(){
       let age = new Date().getFullYear();//当前年份
       return age-this.birth;
     }
   }
   console.log(person.age())
  • apply 可以指向调用的对象
    想要调用person对象age的值 必须用 getAge.apply(person,[]) 而person.age返回的是方法
    "use strict";
    function getAge(){
      return new Date().getFullYear() - this.birth;
    };
    var person = {
      name : "hua",
      birth : 1999,
      age : getAge
    }
    getAge.apply(person,[]);//22

Date日期对象

    var now = new Date();//Date Thu Jul 15 2021 12:11:40 GMT+0800 (中国标准时间)
    now.getFullYear();//年
    now.getMonth();//月
    now.getDate();//日
    now.getDay();//星期几
    now.getHours();//时
    now.getMinutes();//分
    now.getSeconds();//秒

    now.getTime();//时间戳

json 对象

JSON是一个轻量级的数据交换格式。
JavaScript一切皆为对象,任何js支持的类型都可以用JSON来表示
格式:
– 对象都用{}
– 数组都用{}
–所有键值对都是用key:value

    "use strict";
    var user = {
      name : 'hua',
      age : 1,
      id : 2
    }

    //对象转化为字符串
    var str = JSON.stringify(user)
    console.log(user)
    console.log(str)
    //字符串转化为对象
    var ogj = JSON.parse('{ "name": "hua", "age": 1, "id": 2 }')
    console.log(ogj)

JSON对象

var json = '{ "name": "hua", "age": 1, "id": 2 }'

在这里插入图片描述

Ajax

  • 原生的js写法 xhr异步请求
  • jQuey封装好的方法 $("#name").ajax("")
  • axios 请求

面向对象编程

类:模板
对象:实例

原型:

"use strict";
 var Student = {
   name : '',
   age : 10,
   run : function(){
     console.log(this.name+"run...")
   }
 }
 var hua = {
   name: 'hua'
 }
 //hua的原型是Student
 hua.__proto__=Student;
 /*
 hua.run
function run()

hua.run()
huarun... 原型(继承).html:12:17
undefined
console.log(hua)
Object { name: "hua" }
​
name: "hua"
​
<prototype>: Object { name: "", age: 10, run: run()
 }
​​
age: 10
​​
name: ""
​​
run: function run()​​
<prototype>: Object { … }
 */

面向对象class继承

ES6引入的 class关键字

"use strict";
//定义一个类
class Student{
  constructor(age) {
    this.age = age
  }
  setName(name){
    this.name=name;
  }
  run(){
    alert("run");
  }
}
var xiaoming = new Student(10);

继承:

      //定义一个类
      class Student{
        constructor(age) {
          this.age = age
        }
        setName(name){
          this.name=name;
        }
        run(){
          alert("run");
        }
      }
      var xiaoming = new Student(10);

      class XiaoStudent extends Student{
        constructor(age,score) {
          super(age);
          this.score = score
        }
      }
      var xiaoxiao = new XiaoStudent(9,100)
      ========================================
      console.log(xiaoxiao)
Object { age: 9, score: 100 }
​
age: 9
​
score: 100<prototype>: Object {}

原型链

在这里插入图片描述

操作BOM对象(重点)

JavaScript和浏览器的关系?

JavaScript的诞生就是为了在浏览器中运行
BOM:浏览器对象模型(Chrome Firefox 。。。。)

window

window代表浏览器窗口
在这里插入图片描述

Navigator

Navaigator, 封装了浏览器的信息
不过,大多数我们不会使用navigator对象,因为会被人为修改!
在这里插入图片描述

screen

screen.width;
screen.height;

locaation(重要)

location代表当前页面的URL信息

host:"wwww.baidu.com"
href:"https://wwww.baidu.com/"
protocol:"https"
reload:f reload() //刷新页面
//设置新地址
location.assign('https://blog.kuangstudy.com/')

document

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

document.title;
"百度一下,你就知道"
document.title = "hua"
"hua"

获取具体的文档树节点

<dl id ="app">
  <dt>Java</dt>
  <dd>JavaSE</dd>
  <dd>JavaEE</dd>
</dl>
<script>
  var dl = document.getElementById("app")
</script>

获取cookie

document.cookie

劫持cookie原理

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

服务器端可以设置 cookie:httpOnly(只读)

history(不建议使用)

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

BOM节点(重点)

BOM:文档对象模型

核心

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

  • 更新节点
  • 遍历dom节点
  • 删除节点
  • 添加节点
    要操作一个DOM节点就必须先获得这个dom节点
    获得dom节点
//原生代码,之后尽量使用jQuery
var h1 = document.getElementsByTagName("h1")
var h2 = document.getElementById("p1")
var h3 = document.getElementsByClassName("p2")
var father = document.getElementById("father")

更新节点

<div id ="id1">
</div>
var id1 = document.getElementById("id1")
id1.innerText="123"//更新节点文本
id1.innerHTML="<strong>"+id1.innerText+"</strong>"//更新文本的值 可以解析HTML文本标签
id1.style.color = 'red'

删除节点
步骤:先获取父节点,然后通过父节点删除自己(狂老师讲的)
我自己发现其实可以自己删自己

father.remove(p1)
id1.remove()
//删除多个节点的时候,children是在时刻变化的

创建 和 插入节点
我们获得了某个Dom节点假设是空的,我们通过innerHTML就可以增加一个元素了,但是已经有这个节点,我们就不能这么干了

追加

<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")
  list.appendChild(js)//将js节点放到list节点下
</script>

创建一个新的标签,实现插入

var js = document.getElementById("js")
var list = document.getElementById("list")
list.appendChild(js)//将js节点放到list节点下
var newP = document.createElement('p');//创建一个新节点 p标签
newP.id="new_p" //设置id名为new_p
newP.innerText="this is newP"//更新文本
list.appendChild(newP)//加入到list节点下
//============================================或者
var myScript = document.createElement("script")
myScript.setAttribute('type','text/javascript')//这样赋值属性以及值也可以

//改变body的背景颜色
var body = document.getElementsByTagName('body')
body[0].setAttribute('style','background-color: rgb(169, 71, 91);');
//body[0].style.backgroundColor = '#a9475b';

操作表单(验证)

表单是什么 form DOM树

文本框 text
下拉框
单选框 radio
多选框 checkbox
隐藏域 hidden
密码框 password …

获得要提交的信息

<form action="post">
  <p><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="woman" id="gril"></form>
<script>
  var input_user = document.getElementById('username')
  var boy_radio = document.getElementById('boy')
  var gril_radio = document.getElementById('gril')
  //得到输入框的值
  input_user.value
  //修改输入框的值
  input_user.value = '123'
  boy_radio.checked;//判断结果是否为true 从而获取其值boy_radio.value;
  boy_radio.value;

提交表单md5加密密码

终极md5方案

<form action="https://www.baidu.com" method="post" onsubmit="return ckecked()">
  <p><span>用户名</span> <input type="text" id="username" name="username"></p>
  <p><span>密码:</span><input type="password" id="input-password"></p>
    <input type="hidden" name="password" id ="md5-password">
  <input type="submit" value="提交">
</form>
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
<script>
    function ckecked(){
        var username = document.getElementById('username')
        var password = document.getElementById('input-password')
        var md5_password = document.getElementById('md5-password')

        md5_password.value=md5(password.value)
        //return true or return false 校验后
        return true;
    }
</script>

jQuery

JavaScript 和
jQuery库,里面存在大量的JavaScript函数
公式: $(’#…’).click(action)

  公式 :$(selector).action()
-->
<a href="" id="test-jqeury">点我 </a>
<script>
  document.getElementById('id')
  //选择器就是css选择器
  $('#test-jqeury').click(function (){
    alert('1')
  })
</script>

选择器

文档工具站:https://jquery.cuishifeng.cn/

  //标签
  document.getElementsByTagName('p')
  //id 选择器
  document.getElementById('id')
  //类选择器
  document.getElementsByClassName('class')

  $('p').click()
  $('#id').click()
  $('.calss').click()

</script>

jquery事件

鼠标事件 键盘事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery-3.6.0min.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>
//网页加载完事件后响应
$(document).ready(function (){
  $('#divMove').mousemove(function (e){
    $('#mouseMove').text("x:"+e.pageX+",y:"+e.pageY)
  })
});//化简$(function(){});

</script>
</body>
</html>

jquery操作DOM

在这里插入图片描述
在这里插入图片描述

split(字符分割)

在这里插入图片描述

  • split(".")——通过“.”分割字符串成为数组
  • split(".")[0]——获取分割后数组的第一个(小数点左边的数)
  • split(".")[1]——获取分割后数组的第二个(小数点右边的数)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值