javaScript

1,什么是JavaScript

1.1概述

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

Java javaScript

10天

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

1.2历史

ECMAScript它可以理解为是JavaScript的一个标准

但最新版本已经到es6版本~

但是大部分浏览器还只停留在支持es5代码上!

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

2,快速入门

2.1引入javaScript

  1. 内部标签
<script>alert('hHllo,Word');</script>

2.外部引入

<script src="../JavaScript/js.js"></script>-

代码测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="../JavaScript/js.js"></script>-->
    <script>alert('hHllo,Word');</script>//网页弹窗
</head>
<body>

</body>
</html>

Elements:元素

Console:控制台

Source:源码

Network:网络

Application:用途

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 1.定义变量  变量类型   变量名称 = 变量值;
        let score=71;

        if (score == 60){
            alert("七个");
        }else {
            alert("客服节课");
        }
        // console.log(score);在浏览器打印变量


    </script>
</head>
<body>

</body>
</html>

2.2.数据类型

数据,文本,图形,音频,视频等,都算是数据类型

在JavaScript中不区分小数和整数统一用Number

123//整数123

123.1//浮点数123.1

1.123e3//科学计数法

-99负数

NaN // not a number

Infinity//无穷大

字符串

“abc” “abc”

布尔值

true,false

逻辑运算

&& 两个都为之真,结果为真

|| 一个为真,结果为真

! 真就是假 假就是真

比较运算符号!!! 重要

=

== 等于(类型不一样,值一样,也会判断为ture)

=== 绝对等于(类型一样,值一样结果为TRUE)

这是一个js的缺陷,坚持不要使用==比较

须知:

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

浮点数问题:

console.log(1/3)===(1-1/3)

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

Math .abs(1/2-(1-2/3))<0.000001

null和undefinde

  • null空
  • undefined 是未定义的

数组

Java的数组必须是相同类型的对象,JavaScript中不需要这样

let arr = [1,5,5,"万达华府",]

取数组下标越界会显示:undefined

对象

对象是大括号,数组是中括号

每个属性之间使用都逗号隔开,最后一个不需要添加

2.3严格检查格式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /*
        前提:idea需要支持es6语法
        'use strict';严格检查模式,预防JavaScript的随意性导致产生的一些问题
        必须现在JavaScript的第一行
        局部变量建议都用let去定义
         */
        'use strict';
        //全局变量
         i=1;
    </script>
</head>
<body>

</body>
</html>

3.数据类型

3.1字符串

1.正常字符串我们使用,单引号或者双引号包裹

2.注意转义字符

\N

\T

多行字符串编写tab上面的那个可以实现

let person = `
你好
我是王刚
hello,word`

4.模板字符串

 let name = "王刚";
    let age = 3;
    let msg =  `你好啊, ${name}`
</script>

5.字符串长度

str.length

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

7.console.log(student.indexOf('t')); 获取指定下标值

8.console.log(student.substring(3,7)); 结头不结尾

3.2数组

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

let arr = [1,2,3,4,5,6];

1.长度

arr.length

注意:加入给arr.length赋值,数组大小就会发生变化~如果赋值过小元素就会丢失

2.indexOF,通过元素获得下标索引

字符串的1和数字1是不同的

3.slice()截去array的一部分,返回一个新数组,类似于String中的substing

4.pubsh() pop()

push:压入尾部

pop:弹出尾部的一个元素

5.unshift(),shift()头部

unshift:压入头部

shift:弹出头部的一个元素

6.排序sort();

7.元素反转 reverse()

8.concat();

注意:concat()并没有修改数组,只是会返回一个新的数组

9.连接join

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

10.多维数组

数组:存储数据(如何存,如何取,方法都可以自己实现)

3.3对象

若干个键值对

<script>
    let person = {
        name:"王刚",
        age:10,
        emil:"1557724280@qq.com",
        score:0
    }

javaScript中,{.....}表示一个对象,键值对描述属性xxxx,xxx多个属性之间使用逗号隔开,最后一个属性不加逗号!

JavaScript中的所有健都是字符串,值是任意对象

1.对象赋值

person
{name: '王刚', age: 10, emil: '1557724280@qq.com', score: 0}
person.name="子义";
VM169:1 Uncaught SyntaxError: Invalid or unexpected token
person.name="子义"
'子义'

2.使用一个不存在的对象属性,不会报错,undefined

3.动态的删减属性,通过delete删除对象的属性

person
{name: '子义', age: 10, emil: '1557724280@qq.com', score: 0}
delete person.name
true

4.动态的添加,直接给新的属性添加值即可

person.haha="haha"
'haha'
person
{age: 10, emil: '1557724280@qq.com', score: 0, haha: 'haha'}
age: 10
emil: "1557724280@qq.com"
haha: "haha"
score: 0

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

'age' in person
true

6.判断一个属性是否是这个对象自身拥有的 hasOwnProperty()

person.hasOwnProperty('toString')//判断person这个属性是否有toString这个方法
false
person.hasOwnProperty('age')//判断person这个属性是否有toString这个方法
false
true

3.4流程控制

if判断

let age = 3;
if (age < 3){
    alert("小孩")
}else {
    alert("不是小孩")
}

while循环

      let age = 3;
while (age < 100){
    age++;
    console.log(age)
}

for 循环

let age = 3;
for (let i = 0; i < 100; i++) {
    console.log(i)
}

forEach 函数循环

let age = [12,54,54,548,1]
age.forEach(function (value) {
    //function函数循环
    console.log(value)
})

3.5,map和set

<script>
     /**
      * 打印学生的成绩和名字
      * 
      * @type {Map<string, number>}
      */
let map = new Map([['top',100],['jack',80],['hah',60]])
     let name = map.get('top');
     console.log(name)
      map.set('asdf',100)//新增
      map.delete(“tom”)//删除
    

Set:无序不重复的集合

set.add(2);//添加

set.delete(1);//删除

console.log(set.has(3));//是否包含某一个元素

3.6,iterator

let arr = [3,4,5]
for (let arrKey of arr) {//现在是遍历数组,如果吧for (let arrKey of arr)里面的of替换成in的话,那就是查数组索引
    console.log(arrKey);
}

遍历map(注意第一行的中括号,和键值对)

let map = new Map([['nihao',66],['dsf',54],['wosf',1233]])
  for (let x of map){
      console.log(map)
  }

遍历set 注意Set的s大写

let set = new Set([3,6,8,9]);
  for (let x of set){
      console.log(x)
  }
 

4.函数

4.1定义函数

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

一旦执行到return代表函数结束,返回结果!

如果没有执行return,函数执行也会返回结果

定义方式二

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

function(x){....}这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数

调用函数

abs(10)//10
abs(-10)//10

参数问题:JavaScript可以传递任意个参数,也可以不传递参数~

参数进来是否存在问题?

假设不存在参数,如何规避


### 5.2 JSON

- json是一种轻量级的数据交换格式。
- 简洁和清晰地层次结构使得JSON成为理想的数据交换语言
- 易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

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

- 对象都用{}
- 数组都用[]
- 所有的键值对都是用key:value

JSON字符串和JS对象的转化

var user = {
name:"q",
age:3,
sex:"nan"
}
//对象转化为json字符串
var jsonUesr = JSON.stringify(user);
//json字符串转化为对象参数为json字符串
var obj = JSON.parse('{}')


很多人搞不清楚,json和js对象的区别

## 6.面向对象编程

### 原型对象

javaScript,Java,C#.....面向对象;

- 类:模板 , 原型对象
- 对象:具体的实例

在JavaScriot这个需要大家换一下思维方式!

原型:

var Student = {
name:"asf",
age:3,
run:function () {
console.log("飞")
}
}
var xiaoming ={
name:"小明"
}
//原型对象
xiaoming.proto = Student;


> class继承

class关键字,是在es6引入

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

class Student{
constructor(name) {
this.name=name;
}
hello(){
alert('hello')
}
}
let xiaoming = new Student("xiaoming")


class xiaoStundent extends Student{
constructor(name, grade){
super(name)
}
Mygrads(){
alert("王刚");
}
}
let xiaoming = new xiaoStundent("xiaoming")


本质,查看对象原型

> 原型链

proto

## 7 , 操作BOM对象(重点)

> 浏览器介绍

JavaScript和浏览器关系?

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

 BOM:浏览器对象模型

- IE6~11
- Chrome
- Safar
- Firefox
- Opera

> Navigator

Navigator,封装了浏览器的信息

navigator.appName
'Netscape' 

navigator.appVersione
undefined
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'

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



> screen

代表屏幕尺寸

screen.width
1536
screen.height
864


> location(重要)

location代表当前页面URL信息

host: "www.bilibili.com"
hostname: "www.bilibili.com"
href: "https://www.bilibili.com/video/BV1JJ41177di?p=19"
protocol: "https:"
reload: ƒ reload()//刷新网页
//设置新的地址
location.assign()


> document

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

document.titlt='子义'


获取具体的文档树节点

java
java1
java2
```

获取cookie

document.cookie

获取网页信息

history

history代表浏览器的历史记录

history.back//后退
ƒ back() { [native code] }
history.forword//前进
undefinedxxxxxxxxxx <dt>java</dt><dt>java1</dt><dt>java2</dt>history.backƒ back() { [native code] }history.forwordundefined

8.操作DOM对象

核心

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

  • 更新:更新Dom节点
  • 遍历dom节点:得到Dom节点
  • 删除:删除一个Dome节点
  • 添加:添加一个新的节点

套操作一个dome节点,就必须要先获得这个Dom节点

<dl class="app">
    <dt id="as">java</dt>
    <dt>java1</dt>
    <dt>java2</dt>
</dl>
<script>
    let cai = document.getElementById('app')
    let dt = document.getElementsByClassName()
    let chi = father.children//获取父节点,下面的所有子节点

这是原始节点,之后我们都用JQ

更新节点

id1.innerText='123' // 修改文本的值
'123'
id1.innerHTML='<strong> 1<strong>'//可以解析HTML标签
'<strong> 1<strong>'

操作JS

id1.innerText='123'
'123'
id1.style.color='red'
'red'
id1.style.fontSize='2em'
'2em'
id1.style.padding='3em'
'3emxxxxxxxxxx id1.innerText='123''123'id1.style.color='red''red'id1.style.fontSize='2em''2em'id1.style.padding='3em''3emscript>    let id1 = document.getElementById('id1')</script>

注意点

  • 属性使用字符串包裹
  • -转驼峰命名

删除节点

删除节点的步骤:现货区父节点,在通过父节点删除自己

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

插入节点

我们获得了某个DOm节点,假设这个dom节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM节点已经存在元素了,我们就不能这干了!会产生覆盖

追加

<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'),
        list = document.getElementById('list')
</script>

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

var js = document.getElementById('js'),
    list = document.getElementById('list')
let newP = document.createElement('p');//创建一个p标签
newP.id = 'newP'//创建一个id
newP.innerText = 'hello.kuangs';
list.appendChild(newP)
//创建一个标签节点(通过这个属性,可以改任意的值)
let MyScript =  document.createElement('script')
    MyScript.setAttribute('type','text/javascript')
    list.appendChild(MyScript)
    
      var Mysyle = document.createElement('style')//生成style对象
    Mysyle.setAttribute('type','text/css')//设置属性,转换成css
    Mysyle.innerHTML = 'body{    background: rebeccapurple;}'
    document.getElementsByTagName('head')[0].appendChild(Mysyle);//将创建好的内容丢进head

9.操作表单

表单是什么 form Dom 树

  • 文本框 text
  • 下拉框 < select >
  • 单选框 radio
  • 多选框 CheckBox
  • 隐藏域 hidden
  • 密码框 password
  • ....

表单的目的:提交信息

获得提交的信息

<form action="post">
    <p>
        <span>用户名:</span> <input type="text" id="username">
    </p>
    <p>
        <span>性别:</span>
        <input type="radio" name="sex" value="man" id="boy">男
        <input type="radio" name="sex" value="women" id="girl">女
    </p>
    <script>
       let input_text = document.getElementById('username')
       let boy_radio = document.getElementById('boy')
       let girl_radio = document.getElementById('girl')
        //得到输入框的值
        input_text.value
        //修改输入框的值
        input_text.value = '123'
        //对于单选框,多选框等等固定的值boy_radio只能获取到当前的值
        boy_radio.checked;//查看返回结果,是否为TRUE,如果为true则被选中
        girl_radio.checked = true;//赋值

md5加密链接

<script> src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"</script>

初识JQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="llb/jquery-3.5.1.js"></script>
</head>
<body>
<a href="" id="子义">点我</a>
<script>
    //选择器就是css选择器
    $('#子义').click(function () {

           while (true){
               alert('我是赵付豪')
           }
    })
</script>
</body>
</html>

JQuery选择器

//原生js选择器少不好记
//标签
<script>
    document.getElementsByTagName()//标签
    document.getElementById()//id
    document.getElementsByClassName()//class
    //JQuery选择器 css中的选择器他都能用
    $('p').click()//标签选择器
    $('.class').click()//类选择器
    $('#id').click()//id选择器

事件

鼠标事件,键盘事件,其他

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="lib/Download%20jQuery%20_%20jQuery.html">

    </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').onmousemove(function (e) {
            $('#mouseMove').text('x:'+e.pageX+'y:'+e.pageY)
        })
    })
</script>
</body>
</html>

操作Dom节点

$('.adc li[id = cde]').text();//获得值
$('.adc li[id = cde]').text('设置值');

css

$('#cde').css({"color":"red"})

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

$('#cde').css({"display":"none"})//隐藏
   $('#cde').css({"display":"show"})//显示

未来 ajaxb'n

小技巧

  1. 如何巩固js(看JQuer源码,看游戏源码)
  2. 巩固HTML.css(扒网站,全部down下来,然后对应修改看效果)
posted @ 2021-12-02 10:27  πππ·  阅读(91)  评论(0)    收藏  举报