JavaScript

1. 今日概要

  • JavaScript是一门编程语言。浏览器就是JavaScript语言的解释器

  • DOM和BOM

    • 相当于编程语言内置的模块
    • 例如:python中的re、random、time、JSON模块等
  • jQuery

    • 相当于是JavaScript的第三方模块
    • 例如:python中的requests、openpyxl

1.1 JavaScript让程序实现动态效果

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .menus{
                width: 200px;
                border: 1px solid red;
            }
            .menus .header{
                background-color: gold;
                padding: 20px 10px;
            }
        </style>
    </head>
    <body>
        <div class="menus">
            <div class="header" onclick="muFunc()">大标题</div>
            <div class="item">内容</div>
        </div>

        <script type="text/javascript">
            function muFunc(){
                // alert("你好呀");
                confirm("是否要继续?");
            }
        </script>
    </body>

</html>

1.2 代码位置

- <!-- 位置一:放在head标签、css下方,代码写在script标签内 -->
- <!-- 位置二:写在body标签内部的最尾部 -->
    - 一般推荐放在位置二;

1.3 JS代码存在形式

  • 当前HTML中
<script type="text/javascript">
    function a(){

    }
</script>
<script type="text/javascript">
    alert("你干嘛?")
</script>
  • 写在其他js文件中,导入使用
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .menus{
                width: 200px;
                border: 1px solid red;
            }
            .menus .header{
                background-color: gold;
                padding: 20px 10px;
            }
        </style>
        <script src="/static/js/js-adress.js"></script>
    </head>
    <body>
        <div class="menus">
            <div class="header" onclick="muFunc()">大标题</div>
            <div class="item">内容</div>
        </div>
        <!-- 导入位置一般也放在此处 -->
        <script src="/static/js/js-adress.js"></script>
    </body>
</html>

1.4 注释

  • HTML的注释,HTML代码块
<!-- 注释内容 -->
  • CSS的注释,style代码块
/* 注释内容 */
  • JS的注释,JavaScript代码块
// 注释内容

/* 注释内容 */

2. JavaScript

2.1 变量

  • python
name = "用户1"
print(name)
  • JavaScript
<script type="text/javascript">
    var name = "用户";
    console.log(name);
</script>

2.2 字符串类型

// 声明
var name = "用户";
var name = String("用户");
// 常见功能
var name = "中国联通";
// 获取长度
var v1 = name.length;
// 取出下标字符
var v2 = name[0];   // 等价于 == name.charAr(3)
// 去除空白字符
var v3 = name.trim();
// 切片
var v4 = name.substring(1,2);
案例:跑马灯
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <span id="txt">欢迎中国联通领导XXX莅临指导</span>
        <script type="text/javascript">
            function showText(){
                // 1. 去HTML中找到标签并获取他的内容 (DOM)
                var tag = document.getElementById("txt");
                var dataString = tag.innerText;
                // console.log(dataString);
        
                // 2. 动态效果:把文本中的第一个字符获取到,并将其放在字符串最后位置
                var firstChar = dataString[0];
                var otherString = dataString.substring(1, dataString.length);
                var newText = otherString + firstChar;
                // console.log(newText);
        
                // 3. 在HTML标签中更新内容
                tag.innerText = newText;
            }
            
            // JavaScript中的定时器,下述代码为每一秒执行一次函数
            setInterval(showText, 1000);
        </script>
    </body>
</html>

2.3 数组

// 定义
var v1 = [11,22,33,44];
var v2 = Array([11,22,33,44]);
// 操作
var v1 = [11,22,33,44];

v1[1]
v1[0] = "用户"

v1.push("联通");          // 在尾部追加
v1.unshift("中国");         // 头部插入

v1.splice(索引,0,元素);
v1.splice(1,0,"电信");    //指定位置插入

v1.pop();                //尾部删除
v1.shift();                //头部喊出
v1.splice(索引,1);     
v1.splice(3,1);         // 指定位置删除

var v1 = [11,22,33,44];
// 定义一个变量item,用于循环 v1中的每一个索引
for(var idx in v1){
    // 获取循环的索引元素
    print(v1[idx]);
    // 获取列表的下标
    print(idx);
}
var v1 = [11,22,33,44];
for(var i=0; i<v1.length; i++){
    
}
  • 注意:break 和 continue
案例:动态数据
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>

        </style>
    </head>
    <body>
        <div>
            <ul id="city">
                <!-- <li>北京</li>
                <li>上海</li>
                <li>深圳</li> -->
            </ul>
        </div>

        <script type="text/javascript">
            // 发送网络请求,获取数据
            var cityList = ['北京', '上海', '深圳'];
            for(var idx in cityList){
                var text = cityList[idx];

                // 创建 li标签
                var tag = document.createElement("li");
                // 在li标签中写入内容
                tag.innerText = text;

                // 添加到id=city的标签内
                var parentTag = document.getElementById("city");
                parentTag.appendChild(tag);
            }
        </script>
    </body>
</html>

2.4 对象(字典)

info = {
    "name":"用户",
    "age":18
}

info = {
    name:"用户",
    age:18
}
info.age
info.name = "Employee"

info["age"]
info["name"] = "用户"

delete info["age"]
info = {
    name:"用户",
    age:18
}

for(var key in info){
    // key = name/age    data = info[key]
}
案例:动态表格
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <table border="1px">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>年龄</th>
                </tr>
            </thead>
            <tbody id="body">
                <!-- <tr>
                    <td>1</td>
                    <td>果汁</td>
                    <td>19</td>
                </tr> -->
            </tbody>
        </table>

        <script type="text/javascript">

            //网络请求获取,写入到页面上
            var dataList  =[
            {id:1,name:"果汁",age:19},
            {id:1,name:"果汁",age:19},
            {id:1,name:"果汁",age:19},
            {id:1,name:"果汁",age:19}
            ]

            for(var idx in dataList){
                var info = dataList[idx];

                var tr = document.createElement("tr");
                for(var key in info){
                    var text = info[key];
                    var td = document.createElement("td");
                    td.innerText = text;
                    tr.appendChild(td);
                }
                var bodyTag = document.getElementById("body");
                bodyTag.appendChild(tr);
            }
            // console.log(tr);
        </script>
    </body>
</html>

2.5 条件语句

if (条件) {
    
}else{
    
}

if (1==1){
    
}else{
    
}
if (条件) {
    
}else if (条件) {
    
}else if (条件) {
    
}else{
    
}

2.6 函数

function func(){
    ...
}
    
    
func()

3. DOM

DOM,就是一个模块,可以对HTML页面中的标签进行操作。

<table border="1px">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody id="body">
        <!-- <tr>
            <td>1</td>
            <td>果汁</td>
            <td>19</td>
        </tr> -->
    </tbody>
</table>

// 根据ID获取标签
var bodyTag = document.getElementById("body");
// 获取标签中的文本
bodyTag.innerText
// 修改标签中的文本
bodyTag.innerText = "hhhhh"
// 创建标签
var bodyTag = document.createElement("div");
// 标签内写入内容
bodyTag.innerText = "hhhhh"
<ul id="city">

</ul>


<script type="text/javascript">
    var bodyTag = document.getElementById("city");
    // 创建 li标签
    var tag = document.createElement("li");
    // 在li标签中写入内容
    tag.innerText = "上海";
    parentTag.appendChild(tag);
</script>

3.1 事件的绑定

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>

        </style>
    </head>
    <body>
        <input type="button" value="点击添加" onclick="addCityinfo()">
        <ul id="city">

        </ul>

        <script type="text/javascript">
            function addCityinfo(){
                var newTag = document.createElement("li");
                newTag.innerText = "联通";
                var parentTag = document.getElementById("city");
                parentTag.appendChild(newTag);
            }
        </script>
    </body>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>

        </style>
    </head>
    <body>
        <input type="text" placeholder="请输入内容" id="txtUser">
        <input type="button" value="点击添加" onclick="addCityinfo()">
        <ul id="city">

        </ul>

        <script type="text/javascript">
            function addCityinfo(){
                // 1. 先获取输入框中用户输入的数据
                var txtTag = document.getElementById("txtUser");

                // 2. 获取input框中用户输入的内容
                var newString = txtTag.value;

                // 判断用户输入的内容是否为空,只有不为空才能继续执行下后续逻辑
                if (newString.length > 0){
                    // 3. 创建标签,<li></li>中间的文本信息就是用户输入的内容
                    var newTag = document.createElement("li");
                    newTag.innerText = newString;
    
                    // 4. 把标签添加到ul中
                    var parentTag = document.getElementById("city");
                    parentTag.appendChild(newTag);
    
                    // 5. 将输入框内容清空
                    txtTag.value = "";

                }else{
                    alert("输入框内容不能为空,请输入内容~")
                }
            }
        </script>
    </body>
</html>
  • 注意:DOM中还有很多操作,但比较繁琐,在写页面效果时,在实操中会使用jQuery来实现 / vue.js / react.js

4. 知识点回顾-Python

4.1 编码相关

文件存储时,使用某种编码,打开使用时就需要使用相同的编码,否则就会乱码
字符底层存储时本质上都是1010101010101
字符和二进制的对应关系(编码):
    - ASCII,256中对应关系
    - bg2312,gbk,中文和亚洲的一些国家,一般中文使用2个字节
    - Unicode,ucs2/ucs4,包括现在发现的所有文明
    - utf-8,一般中文使用3个字节

Python默认解释器编码(utf-8):
    Python.exe  代码文件

    如果将代码文件编码保存成了gbk编码,将python默认解释器编码修改为gbk
data = "中"
res = data.encode("utf-8")
print(res)  # b'\xe4\xb8\xad'

data = "中"
res = data.encode("gbk")
print(res)  # b'\xd6\xd0'

4.2 计算机中的单位

位/字节/KB/MB/GB/TB...

办流量/硬盘/内存

4.3 字符串格式化(三种)

v1 = "我是{}, 今年{}".fromat("徐泽林",25)

v2 = "我是%s, 今年%d岁" %("xzl", 25)

name = "徐泽林"
age = 19
v3 = f"我是{name}, 今年{age}岁"

4.4 数据类型

- 常见数据类型:int bool str list tuple dict set float None
    - 哪些转化成布尔值为False:空*、None、0
    
    - 可变和不可变划分:
        - 可变:list、set、dict、
        - 不可变:int、bool、str...
    - 可哈希和不可哈希划分:
        - 字典的键/集合的元素,必须是可哈希的类型
        - 可哈希:int、bool、str...
        - 不可哈希:list、set、dict(不能作为字典的键和集合的元素)
        
- 主要的数据类型:
    - str
        - 独有功能:split、upper、lower、startswith、strip、join
            注意:str不可变;不会对原字符串进行修改,而是生成新的内容
        - 公共功能:len、索引、切片、for、判断
    - list
        - 独有功能:append、insert、remove、pop...
            注意:list可变;功能很多都是对原数据进行操作
        - 公共功能:len、索引、切片、for、判断
    - dict
        - 独有功能:get、keys、items、values
        - 公共功能:len、索引、切片、for、判断(判断键效率很高)

4.5 运算符

基本运算符:加减乘除...

逻辑运算符:(第一个值是True,第一个就能决定,整体即是True,第二个能决定,则使用第二个)
    1>2 and 3<10        # False
    
    v1 = 99 and 88
    print(v1)             # 88
    
    v2 = [] or 10
    print(v2) # 10
    
    v3 = "联通" or []        # "联通"
    

4.6 推导式(简化生成数据)

data = []
for i in range(10):
    data.append(i)

等价于:

data = [i for i in range(10)]

v1 = [i for i in range(10) if i<5]        # [0,1,2,3,4]

4.7 函数编程

函数的基础知识
    - 定义
    - 参数;概念:位置传参/关键字传参/参数默认值/动态参数*args,**kwargs
    - 返回值
        - 函数中一旦遇到return就立即返回,后续代码不再执行
        - 函数没有返回值时默认返回None
函数的进阶:
    - Python中是函数为作用域
    - 全局变量和局部变量,规范:全局变量(大写)、局部变量(小写)
    - 在局部变量中可以使用global关键字;作用:引用全局的那个变量,不是在局部新建
内置函数:(Python内部提供的函数)
    - bin/hex/odc/max/min/divmod/sorted/open文件操作
        - 中文排序的依据:Unicode

文件操作:
    - 基本操作:打开、操作、关闭
        - 为了防止忘记关闭文件,可以用with
    - 打开文件时的模式:
        - r/rb:读             【文件不存在,报错】        【文件目录不存在,报错】
        - w/wb:写(清空)      【文件不存在,自动新建】    【文件目录不存在,报错】
        - a/ab:追加            【文件不存在,自动新建】    【文件目录不存在,报错】
        注意:os.markdirs/os.path.exsits、是否存在,不存在则新建目录

4.8 模块

模块的分类:
    - 自定义模块
        - os.path导入模块时,python内部都会去那个目录找
        - 自己写py文件时,不要与python内置模块同名
        - import/from xx import xx
    - 内置模块:time/datetime/json/re/random/os
    - 第三方模块:requests/openpyxl/python-docx/flask
    
查看当前目录下所有的文件:os.listdir(获取一级目录) / os.walk(获取所有级别目录)
关于时间模块:时间戳 / datetime格式 / 字符串,三种时间格式可以相互转化
关于JSON模块:
    - JSON本质上是字符串,有一些自己的格式要求,例如:无元组/无单引号
    - json.dumps序列化时,只能序列化Python常用数据类型
关于re正则模块:
    - 正则:\d  \w
    - 贪婪匹配和非贪婪匹配,默认贪婪匹配,想让他不贪婪,个数后面加?号
    - 正则:re.search/re.match/re.findall
第三方模块:
    - 安装方式:pip管理工具、源码、wheel包

4.9 面向对象

目标:不是为了用面向对象编程(推荐使用函数编程,面向对象要看得懂)

面向对象三大特性:封装、继承、多态

5. 知识点回顾-前端

5.1 前端开发

- 前端知识点分为三部分:
    - HTML:标签具有默认特点
    - CSS:修改标签的特点
    - JavaScript:动态
    
- HTML标签
    - dev/span/a/img/input/form/table/ul...
    - 块级标签和行内标签,例如:div span默认谁是块级标签? div块级、span行内
        注意:css样式,发现行内标签设置高度、宽度、内边距..都无效
        - 需要变成块级标签 或 块级行内标签
    - form表单 + input/select/textarea 数据框
        - action,提交地址
        - method,提交方式
        - form标签中有一个submit
        - 内部标签都需要设置name属性
        
- CSS样式
    - 布局一定会用到的样式:div + float(脱离文档流,clear:both / clearfix)
    - 高度和宽度
    - 边距
        - 内边距 pandding
        - 外边距 margin
    - 字体大小/颜色
    - 边框
    - 背景颜色
    - hover,鼠标移入时触发的CSS样式

评论