javascript基础知识总结

javascript

1.javascript历史

2.快速入门

2.1引入JavaScript

  1. 内部标签
<script>
    alert('hello world');
</script>
  1. 外部标签
  • 注意script标签需要都写完,不要写自闭和
<script src="yt.js"></script>
  1. 测试代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的第一个JavaScript</title>
    <!--  script里面写,JavaScript脚本  -->
    <!--
    <script>
        alert('hello.world');
    </script>
    -->

    <!--
    外部引入
    script标签要成对出现
    -->
    <script src="yt.js"></script>
</head>
<body>

</body>
</html>

2.2 基本语法入门

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js基本语法</title>

    <script>
        /*
            JavaScript,区分大小写

            console.log(num)        浏览器控制台打印变量
            
        */
        // 变量    变量类型 变量名 = 初始值;
        var num = 1;
        var name = "yt";
        // alert(name);
        //条件控制
        if(num>-5){
            alert("haha");
        }else if(num<10){
            alert("haha1111111");
        }
        /*  多行注释  */

    </script>
</head>
<body>

</body>
</html>
  1. 浏览器调试须知
  • Element 元素
  • Console 控制台、可以输入命令
  • Sources 源码,用于调试
  • Network 网络请求查看
  • Application 查看网页在浏览器的缓存,cookie
    在这里插入图片描述

2.3数据类型

数值、文本、音频、视频…

  • 变量
    • var
    • 不能以,数字开头
        //全局变量
        i = 1;
  • number
    • js不区分小数和整数
    122      //整数
    122.3   //浮点数
    2e3     //科学计数法
    NaN     //not a number
    Infinity //无限大
    
  • 字符串
    • ‘asd’
    • “qwe”
  • 布尔值
    • true
    • false
  • 逻辑运算
    • &&
    • ||
  • 比较运算符
    • = 赋值
    • == 等于(类型可以不一样、数值相同就相等)
    • === 绝对等于(类型一样、数值一样、结果为true)
  • null和undefined
    • null,空
    • undefined,未定义
  • 数组
    • java数组是相同的类型集合,JavaScript不要求类型一致
    • 数组下标越界了就会,undefine
        var a = [1,2,3,"hello",true];
        new Array(1,2,5,'hello',false);
  • 对象
    • 对象大括号,对象中括号
    • 每个属性之间用逗号隔开,最后一个不用加逗号
        var person = {
            name : "yutang",
            age : 3,
            tag : ['java','mysql','javascript']
        }
//使用对象中的数据
person.name
"yutang"
  • 注意
    • 尽量使用、=== ,不要使用,==
    • NaN,与所有的数值都不想等,包括自己
    • isNaN(NaN),通过这个方法来判断是否为NaN
    • 尽量避免浮点数的运算、比较因为存在浮点数的精度问题
    <script>
        //false  浮点数精度问题
        console.log(1/3===(1-2/3));

        //true    用这个方法来避免
        console.log(Math.abs(1/3===(1-2/3))<0.00001);

    </script>

2.4严格检查模式

    <script>
        //严格检查模式,预防JavaScript的随意性产生问题,必须写在第一行
        //局部变量建议就是用,let
        'use strict'

        //非严格模式认为是全局变量,严格模式报错
        i = 1;
        //es6中,局部变量用let
        let a = 2;
    </script>

3.数据类型

3.1字符串

  1. 正常字符串用,单、双引号包裹
  2. 单、双引号输出,需要转义字符(\)
  3. 多行字符串
    <script>
        //多行字符串,使用反引号括起来
        var a = `
        hello world!
        i need happy!
        `;
        alert(a);
    </script>
  1. 模板字符串
        //模板字符串
        let name = "yutang";
        let age = 3;
        let b = `你好,${name}`;
        alert(b);
  1. 字符串长度
  • .length
  1. 字符串无可变性
  2. 大小写转化
console.log(name.toUpperCase())
VM98:1 YUTANG
undefined
console.log(name.toLowerCase())
VM168:1 yutang
  1. javascript无单个字个字符,单个字符认为是长度为1的字符串
  2. substring,左开右闭

3.2数组

  • Array可以包含任何数据类型
  • 给数组的长度赋值,过大会出现空的位置,过小会把多余的数值丢弃
    <script>
        //定义数组
        var a = [1,2,3,4,5,6];
        //数组的长度
        alert(a.length);
    </script>
//给长度赋值
a.length=10
10
a
(10) [1, 2, 3, 4, 5, 6, empty × 4]
//根据元素找位置
a.indexOf(1)
0
//截取数组
a.slice(2,4)
(2) [3, 4]
//push、尾部添加,pop、弹出最后一个
a
(6) [1, 2, 3, 4, 5, 6]
a.push('q','e')
8
a
(8) [1, 2, 3, 4, 5, 6, "q", "e"]
a.pop()
"e"
//shift、弹出头部,unshift、添加头部
a
(7) [1, 2, 3, 4, 5, 6, "q"]
a.shift()
1
a.unshift(9)
7
//sort、排序
//revert、反转
//concat,数组拼接,不会在原始的数据上改动,只是返回了新的
a.concat(0.6)
(7) [1, 2, 3, 4, 5, 6, 0.6]
//join、连接符
a.join("--")
"1--2--3--4--5--6"
//fill、填充

3.3对象

  • 若干个键值对
  • 用大括号括起来,属性之间用逗号隔开,最后一个属性后面不用加逗号
  • 使用一个不存在的对象属性,不会报错显示undefined
   //对象
   //最后一个不用逗号
   var person = {
       name : "yutang",
       age : 3,
       tag : ['java','mysql','javascript']
   }
  • javascript可以用delete动态删除属性
  • Javascript可以动态添加
person
{name: "yutang", age: 3, tag: Array(3)}
person.haha="huhdiuh"
"huhdiuh"
person
{name: "yutang", age: 3, tag: Array(3), haha: "huhdiuh"}
delete person.haha
true
person
{name: "yutang", age: 3, tag: Array(3)}
  • 判断某个对象是否有某属性 “xxx” in 对象
    • javascript中对象中的属性都是字符串
    • javascript中对象中的值是其相应的类型
"name" in person
true
//继承自父类的方法
"toString" in person
true

3.4流程控制

//if语句
if(){

}else if(){

}
//循环,避免死循环
while(){

}
for( ; ; ){

}
do{

}while()
//遍历对象里的元素,类似java中的增强for循环,
//es6的新特性
for( of ){

}
//便利下标
for( in ){

}

3.5Map和Set

    <script>
        //严格语法
        "use strict"
        //es6的最新产品
        //map,通过key来获取value
        var map = new Map([["zhangsan",100],["lisi",78],["wangwu",90]]);
        console.log(map.get("lisi"));
        //添加键值对
        map.set("hsuhdj",68);
        map.delete("lisi");

        //set,无序不重复的集合会去重
        var set = new Set([3,1,1,1,1,1]);
        console.log(set);
        set.add(2);   //添加
        set.delete(1);  //会删去所有的1
        set.has(1)    //判断是否包含某个值
        // Set(2) {3, 1}
        // [[Entries]]
        // 0: 3
        // 1: 1
        // size: (...)
        // __proto__: Set
    </script>

3.6 iterator

  • es6新特性
  • 遍历set、map用for-of

4.函数

  • 方法,对象里面的函数

4.1定义函数

  • 执行到return就代表函数执行结束。未执行到return函数也会结束,结果为undefined
    <script>
    //定义方式一
        //绝对值函数
        function abs(x) {
            if(x<0){
                x=-x;
            }
            return x;
        }
    //定义方式二
        var  abs = function(x) {
            if(x<0){
                x=-x;
            }
            return x;
        }
    //调用函数
        abs(10);  //10
        abs(-10);  //10
    </script>
  • 参数问题
    • JavaScript可以不传递参数,也可以传递多个参数
        <script>
        //绝对值函数
        function abs(x) {
            //判断传入参数的值,手动抛出异常
            if(typeof x !== "number"){
                throw "not a number";
            }
            if(x<0){
                x=-x;
            }
            return x;
        }
    </script>
    
    • arguments
      • 是JavaScript免费赠送的关键字
      • 它表示函数接受的所有的参数,是一个数组
      • 会包含所有的参数,使用未包含的参数需要排除已有的参数
    • rest
      • 获取除了已经获取的参数,剩余的参数
      • 只能放在参数列表的最后面,前面加…
          //使用格式
          function aaa(a,d,...rest) {
              console.log(rest);
          }
      

4.2变量的作用域

  • javascript中的,var有作用域
  • 假设在函数体中申明,在函数体外不能使用 (若想使用则用,闭包)
  • 如果函数内部申明了相同的变量,使用不冲突
  • 内部函数变量与外部函数变量名相同,则先在自生函数内向外查找
  • 先用后定义,不会出错。只是变量未赋值。js引擎,自动提升y的定义,为提升赋值。
  • 变量都在最前面进行赋值
    <script>
        function f() {
            var x = 0;
            x = x + 1;
        }
        x = x + 2;  //Uncaught ReferenceError: x is not defined
    </script>

    <!-- 申明相同变量 -->
    <script>
        function f() {
            var x = 0;
            x = x + 1;
        }
        function f1() {
            var x = "0";
            x = x + 1;
        }
    </script>

    <!-- 内部函数能使用外部的变量,反之不可以 -->
    <script>
        function f() {
            var x = 0;
            x = x + 1;
            function f1() {
            var y = x + 1;
            }
            x = y;//Uncaught ReferenceError: x is not defined
        }
    </script>

    <!-- 内部函数变量与外部的变量相同 -->
    <!-- 内部函数变量与外部函数变量名相同,则先在自生函数内向外查找 -->
    <script>
        function f() {
            var x = 0;
            x = x + 1;
            function f1() {
            var x = x + 1;
            }
            f1();
        }
    </script>

    <!-- 先用后定义 -->
    <script>
        var a = 1 + y;
        var y = "1";   
        // x is not defined

        //等价于
        var y;
        var a = 1 + y;
        y = "1";
    </script>
  1. 全局变量 var
  • window,全局对象
  • 由于js所有的全局变量都是绑定window上的,所以会引发冲突。我们可以通过绑定在别的对象上解决冲突。
    //全局变量
    var a = 1;
    alert(a);
    alert(window.a);//全局变量绑定在windosw对象下

    <script>
        //唯一全局变量
        var yt = {};
        //定义全局变量
        yt.a = 1;
        yt.aaa function (x) {
            console.log(x);
        }
    </script>
  1. 局部变量 let
    <script>
        function aaa(){
            for (var i = 0; i < 100; i++) {
                console.log(i);
            }
            console.log(i+1);   //会输出  i  为  101
        }
    </script>

    <script>
        function aaa(){
            for (let i = 0; i < 100; i++) {
                console.log(i);
            }
            console.log(i+1);   //i is not defined
        }
    </script>
    
  • es6,关键字let,用于解决冲突问题。
  1. 常量 const
  • es6之前,全是大写命名的变量是常量
  • 现在用const,就可以不改变了

4.3方法

  • 方法就是把函数放在对象内
  • js中apply可以控制this的指向
    <script>
        var me = {
            name : "jjsji",
            birth : 2010,
            //方法
            age : function () {
                var now = new Date().getFullYear();
                return now - this.birth;
            }
        }

        //属性
        me.name
        //方法
        me.age()

        //等价于上面
        <script>
        function getage() {
            var now = new Date().getFullYear();
            return now - this.birth;
        }
        var me = {
            name : "jjsji",
            birth : 2010,
            //方法
            age : getage
            
        }
        var meeee = {
            name : "jjsjirrfff",
            birth : 2010,
            //方法
            age : getage
            
        }


    // me.age()    可以调用
    //getage().apply(me,[])    可以调用
    //getage()     NaN     因为直接调用的方法是window的方法
    </script>

5.内部对象

  • 标准对象

5.1 Date

    <script>
        var now = new Date();       //Fri Apr 02 2021 18:09:49 GMT+0800 (中国标准时间)    设备的时间
        now.getFullYear();          //年
        now.getMonth();             //月     1--11
        now.getDate();              //日期
        now.getDay();               //星期几
        now.getHours();             //时
        now.getMinutes();           //分
        now.getSeconds();           //秒

        now.getTime();              //时间戳,从1970-1.1-00:00:00,开始计算全世界统一
        now = new Date(时间戳);
        now.toLocaleString();       //转换为当地时间
    </script>

5.2 json

  • 早期用XML进行数据传输,json用于替代XML
  • 轻量级的数据传输格式
  • JavaScript一切都是对象,任何js支持的类型都可以用json来表示
  • json是一种格式化的字符串,以键值对的形式存在
  • 格式
    • 对象 {}
    • 数组 []
    • 所有的键值对,key:value
    <script>
        var person = {
            name : "zhamnjh",
            age : 3,
            tall : 175
        }

        //对象转化为json
        var userjosn = JSON.stringify(person);
        //json转化为对象     参数为json字符串
        var user = JSON.parse(userjosn);
    </script>
  • json与js对象的区别
    //json
    var josn = '{"name":"yt","age":"18"}';
    //js对象
    var obj = {name:"yt",age:18};

5.3 Ajax

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

6.面向对象编程

6.1 什么是面向对象

JavaScript的面向对象与Java、c#等有一些区别

  • 类:原指模板
  • 对象:指实例

在JavaScript中有以下的不同

  • 原型
    <script>
        var person = {
            name : "qwe",
            age : 3,
            run : function () {
                console.log(this.name+"---run...");
            }
        };

        var yt = {
            name : "yt"
        };
        //原型
        yt.__proto__ = person;
    </script>
<!-- 
    yt
    {name: "yt"}name: "yt"
    __proto__:
     age: 3name:
      "qwe"run:
       ƒ ()
       __proto__: Object
    yt.run()
    yt---run...
 -->
  • class继承
    • es6的新特性
    <script>
        //定义一个类
        class student{
            //构造器
            constructor(name) {
                this.name = name;
            }
            //方法
            hello(){
                console.log(this.name+"---hahaha");
            }
        }
        //继承
        var yt = new student("yt");

        class xiaostudent extends student{
            constructor(name,age) {
                super(name);
                this.age = age;
            }
            myage(){
                console.log("我是一名"+this.age+"岁的小学生");
            }
        }
        var xiaohong = new xiaostudent("xiaohong",1);
    </script>
  • 原型链 (__proto__)

7.操作BOM对象(重要)

BOM:浏览器对象模型

  • IE6-11
  • Chrome
  • Safari
  • Firefox
  • Opera
  1. window对象(重要)
  • window代表浏览器窗口,窗口的宽高n
  1. navigation
  • 封装了浏览器的信息,平台、版本、用户信息
  • 一般我们不会使用这个对象,因为可以进行人为修改
  1. scree
  • 获取屏幕的宽高
  1. location(重要)
  • 代表当前网页指向的URL
    host: "www.bilibili.com"    
    href: "https://www.bilibili.com/video/BV1JJ41177di?p=19&spm_id_from=pageDriver"
    protocol: "https:"      //协议
    reload: ƒ reload()      //重新加载
  1. document
  • 代表当前页面,HTML的DOM树
  • 获取具体的文档树节点
  • 获取网页的cookie
  1. history
  • history.back(); //浏览器历史记录后退
  • history.forward(); //浏览器历史记录前进

8.操作DOM对象

DOM;文档对象模型
浏览器的网页就是一个Dom树形结构

  • 更新Dom节点
  • 遍历Dom节点
  • 删除Dom节点
  • 添加新的节点

8.1获取Dom节点

  • 除了通过id获取到的值是单个值,其他(class、tag)都是数组
<div id="div">
    <h1>一级标题</h1>
    <p id="p1">jdjdkj</p>
    <p class="p2">jdkjdkljdlkj</p>
</div>

<script>
    //获取标签属性
    document.getElementsByTagName("h1");
    //获取id属性
    document.getElementById("p1");
    //获取class属性
    document.getElementsByClassName("p2");
    //获取父节点下的子节点
    var div = document.getElementById("div");
    div.children
</script>

8.2更新节点

<body>
<div id="div">123</div>

<script>
    var div = document.getElementById("div");
    //修改文本内容
    div.innerText = "nihai";
    //修改HTML
    div.innerHTML = "<strong>hdjhdjhdjdhj</strong>";
    //修改css样式
    //样式属性全为,驼峰命名。
    //属性值全为,字符串
    div.style.fontSize = "30px";
</script>
</body>

8.3删除节点

  • 删除是一个动态的过程,删除多个节点时children是一直变化的
  1. 先获取父节点
  2. 再通过父节点删除掉自己
<body>
<div id="div">
    <h1>一级标题</h1>
    <p id="p1">jdjdkj</p>
    <p class="p2">jdkjdkljdlkj</p>
</div>

<script>

    //删除子节点
    var self = document.getElementById("p1");
    var father = self.parentElement;
    father.removeChild(self);
    //下面是错误的,因为删除过程是动态的
    father.removeChild(father.children[0]);
    father.removeChild(father.children[1]);
    father.removeChild(father.children[2]);
</script>
</body>

8.4插入节点

我们获得某个DOM节点。如果此节点是一个空节点,我们可以使用innerHTML、innerText,这两个方法进行填充。但是如果此节点不是空节点,那么我们就会把节点中已有的内容进行覆盖,此时不能用这个方法。

  • append,插入到父节点的最后面
  • insert,插入到节点之前
  1. 追加
<body>
<p id="js">javascript</p>
<div id="div">
    <p id="se">javase</p>
    <p id="ee">javaee</p>
    <p id="me">javame</p>
</div>

<script>
    //把js追加到div中,移动节点
    var js = document.getElementById("js");
    var div = document.getElementById("div");
    div.appendChild(js);
</script>
</body>
  1. 创建一个新标签,插入
<body>
<p id="js">javascript</p>
<div id="div">
    <p id="se">javase</p>
    <p id="ee">javaee</p>
    <p id="me">javame</p>
</div>

<script>
    //创建一个新节点
    var newp = document.createElement("p");
    newp.innerText = "nihjjsjhjh";
    newp.setAttribute("id","newp");     //newp.id = "newp";
    //插入想要的位置
    var div = document.getElementById("div");
    div.appendChild(newp);
</script>
</body>
  1. 插入到子节点之前
<body>
<p id="js">javascript</p>
<div id="div">
    <p id="se">javase</p>
    <p id="ee">javaee</p>
    <p id="me">javame</p>
</div>

<script>
    //把js追加到div中,移动节点
    var js = document.getElementById("js");
    var div = document.getElementById("div");
    //插入到某节点之前
    var ee = document.getElementById("ee");
    div.insertBefore(js,ee);
</script>
</body>

9.操作表单

  1. 表单
    • form
    • input
<body>
<form action="#">
    <P>
        <span>用户名:</span><input type="text" id="username">
    </P>
    <p>
        <input type="radio" name="sex" id="boy"><input type="radio" name="sex" id="girl"></p>
</form>
<script>
    //获取用户名输入框内容
    var un = document.getElementById("username");
    un.value;
    //修改输入框内容
    un.innerText = "qwer";
    //获取单选框是否被选中
    var boy = document.getElementById("boy");
    boy.checked;
    //修改单选框的值
    boy.checked = true;

</script>
</body>
  1. 提交表单、md5加密
<!-- 低级玩法,不安全 -->
<body>
<form action="">
    <p>
        <span>账户:</span>
        <input type="text" id="username" name="username">
    </p>
    <p>
        <span>密码:</span>
        <input type="password" id="pwd" name="pwd">
    </p>
    <p>
        <button type="submit" onclick="tj()">提交</button>
    </p>
</form>
<script>

    function tj() {
        var username = document.getElementById("username");
        var pwd = document.getElementById("pwd");
        console.log(username.value);
        console.log(pwd.value);
        //md5加密
        pwd.value = md5(username.value);
        console.log(pwd.value);
    }
</script>
</body>
<!-- 高级玩法 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单验证</title>
    <!--  MD5工具类  -->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<!--
    onsubmit    绑定提交检测函数
    将结果返回给表单,使用onsubmit接受
    οnsubmit="return tj()"
-->
<form action="" onsubmit="return tj()">
    <p>
        <span>账户:</span>
        <input type="text" id="username" name="username">
    </p>
    <p>
        <span>密码:</span>
        <input type="password" id="pwd" name="input-pwd">
    </p>
    <p>
        <span>密码:</span>
        <input type="hidden" id="md5pwd" name="md5-pwd">
    </p>
    <p>
        <button type="submit">提交</button>
    </p>
</form>
<script>

    function tj() {
        var username = document.getElementById("username");
        var input_pwd = document.getElementById("input-pwd");
        var md5_pwd = document.getElementById("md5-pwd");

        //md5加密
        md5_pwd.value = md5(input_pwd.value);
        console.log(pwd.value);
        //可以在此处校验表单内容,true表示提交通过,false表示阻止提交
        return true;
    }
</script>
</body>
</html>

10.jQuery

  • jQuery库,里面存在着大量的javascript函数
  • 可以引入jQuery的js文件来使用
  • 可以使用jQuery的链接来使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>引入jQuery</title>
    <!-- cdn引入 -->
    <!--    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>-->
    <!--    本地引入-->
    <script src="../js/jquery-3.6.0.min.js"></script>
    <!--
    选择器就是css选择器
    公式  $(selector).action()
    -->
</head>
<body>

<a href="https://www.baid.com" id="a">111</a>

<script>

    $("#a").click(
        function () {
            alert("jdijfoijfoi");
        }
    );
</script>
</body>
</html>

10.1选择器

<script>
    //https://jquery.cuishifeng.cn/
    //jQuery使用手册,不会就去看下

    //就是原生选择器
    //标签
    document.getElementsByTagName();
    //类
    document.getElementsByClassName();
    //id
    document.getElementById();

    //jQuery能使用所有的css选择器
    //标签
    $("p").click();
    //类
    $(".pp").click();
    //id
    $("#ppp").click();
</script>

10.2jQuery事件

  • 事件有很多,不会就去上方网站查找
<script>
    //鼠标移动事件
    $().onmousemove();
    //鼠标按下事件
    $().onmousedown();
    //网页加载完毕事件
    $(document).ready(function () {});    //简化为  $(function () {});
</script>

10.3jQuery操作DOM

<body>
<ul id="ul">
    <li name="li1">java</li>
    <li class="li2">python</li>
</ul>
<script>
    //获取值
    $('#ul li[name=\"li1\"]').text();                        //$().html();
    //修改文本内容
    $('#ul li[name=\"li1\"]').text("hduqwhjdiuhio");         //$('#ul li[name=\"li1\"]').text("<P>huhuh</p>")
    //修改css样式
    $('#ul li[name=\"li1\"]').css("color","red");
    //隐藏,本质---------display : none;
    $('#ul li[name=\"li1\"]').hide();
    //显示
    $('#ul li[name=\"li1\"]').show();
</script>
</body>

10.3还需学习Ajax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值