• JavaScript(个人笔记总结)


    一、初识JS

    一、基本使用
    1、严格区分大小写,不用显示变量定义类型,变量定义不能以数字开头
    2、标签成对使用,尽量不使用自闭合.
    3、数据类型:number(js不区分小数和整数),NaN不是一个数字,Infinity表示无限大,字符串(‘abc’ “abc”),布尔值(true,false),逻辑运算(&& || !),比较运算符(等于(双等号)(类型不一样,值一样,也会判断为true),绝对等于(三个等号,类型一样,值一样,结果为true)
    须知:
    1、NaN==NaN false,这个与所有的数值都不相等,包括自己
    2、只有通过isNaN(NaN)来判断这个数是否是NaN

    浮点数问题:

    console.log(1/3) === (1-2/3)   false
    console.log(Math.abs(1/3-(1-2/3))<0.00000001)
    

    尽量避免使用浮点数进行运算,因为会有精度损失

    null和undefined
    null 空
    undefined 未定义

    数组

    var arr=[1,2,3,4,true,null,'hello']
    

    取数组下标如果越界就会undefined
    严格检查模式
    前提是IDEA支持ES6语法
    必须写在JS的第一行
    ‘use strict’; 严格检查模式,预防JS的随意性导致产生的一些问题

    三、数据类型

    3.1字符串
    1、正常使用单引号,或者双引号
    2、注意转义字符
    3、多行字符串编写

       var msg = `
            hello
            world
            你好
            `
    

    4、模板字符串

    let name = "kiki";
           let age = 3;
           let msg = `你好啊,${name}`
    

    5、字符串长度

    str.length
    

    6、字符串的可变性,不可变
    7、大小写转换

    str.toUpperCase()
    str.toLowerCase()
    

    8、获取字符索引位置(默认从0开始)

    str.indexOf('t')
    

    9、substring截取字符串

    [)
    str.substring(1)//从第一个字符串截取到最后一个字符串
    str.substring(1,3)//[1,3)
    

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

    var array = [1,2,3,4,5]
    

    1、长度

    arr.length
    

    注意:假如给arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失
    2、indexOf(),通过元素获得下标索引.
    3、**slice()**数组版的substring 截取Array的一部分,返回一个新数组
    4、push()在最后边添加元素,pop()弹出,弹出尾部元素
    5、unshift()头部添加,shift()头部弹出
    6、sort()排序
    7、元素反转reverse()
    8、拼接concat()并没有修改数组,只是会返回一个新的数组
    9、连接符join() 打印拼接数组,使用特定的字符串连接
    10、多维数组

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

    数组:存储数据(如何存,如何取,方法都可以自己实现!)
    3.3对象
    若干键值对

    'use strict';
    var person = {
    		属性名:属性值,
    		属性名:属性值
            }
            
     var person = {
                name: "kiki",
                age: 24,
                email: "eternally_zh128@sina.com",
                score: 0
            }
    

    1、对象赋值

    person.name
    "kiki"
    person.email
    "eternally_zh128@sina.com"
    person.name="zhangsan"
    "zhangsan"
    

    2、使用不存在的属性,不会报错,undefined

    person.haha
    undefined
    

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

    delete person.name
    true
    

    4、动态的添加

    person.haha = "haha"
    "haha"
    

    5、判断属性值是否在这个对象中!
    JavaScript中的所有的键都是字符串,值是任意对象

    "age" in person
    true
    'toString' in person
    true
    

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

    person.hasOwnProperty('toString')
    false
    person.hasOwnProperty('age')
    true
    

    3.4流程控制
    if判断

    'use strict';
            var age = 3;
            if (age>3){
                alert("haha")
            }else{
                alert("heihei")
            }
    

    循环while和for

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

    数组循环

     'use strict';
            var age = [11,23,33,45,44,65];
    
            age.forEach(function (value) {
                console.log(value)
            })
    

    for…in

    'use strict';
            var age = [11,23,33,45,44,65];
    
            for (var num in age){
                console.log(num)//打印下标
                console.log(age[num])
            }
    

    3.5 Map和Set

      'use strict';
          var map = new Map([['tom',90],['jack',80],['kiki',78]]);
          var name = map.get('tom');//通过key获取value
            map.set('admin',123456);
          console.log(name);
    

    Set无序不重复的集合

    var set = new Set([3,2,1,1,1]); //去重
            set.add(4);
            set.delete(1);
            console.log(set.has(3));//是否包含某个元素
    

    3.6、iterator迭代器

    //遍历数组
    var arr = [3,4,5];
            for (var x of arr){
                console.log(x);
            }
    

    遍历map

     var map = new Map([['tom',100],['jack',80],['kiki',60]]);
            for (let x1 of map) {
                console.log(x1);
            }
    

    四、函数

    方法: 对象(属性,方法)
    函数:
    4.1、定义函数
    绝对值函数

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

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

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

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

    abs(20)
    20
    abs(-20)
    20
    

    参数问题:可以传任意个参数

    var abs = function (x) {
                //手动抛出异常
                if (typeof x!== 'number'){
                    throw 'Not a Number';
                }
                if (x>0){
                    return x;
                }else {
                    return -x;
                }
            }
    

    arguments是JS免费赠送的关键字
    代表:传递进来的所有参数,是一个

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

    问题:会包含所有的参数,我们有时候想使用多余的参数来进行附加操作,需要排除已有参数
    rest
    ES6引入的新特性,获取已经定义的参数之外的所有参数

    function aaa(a,b,...rest){
    console.log("a=>"+a);
    console.log("b=>"+b);
    console.log(rest);
    }
    

    rest参数只能写在最后边,必须用…rest
    4.2、变量的作用域
    在函数体内声明,在函数体外使用则报错

    <script>
        function a() {
            var x = 1;
            x = x+1;
        }
        x = x + 2;//变量作用域.html?_ijt=ntjbeaaasavgh951luu86imapi:15 Uncaught ReferenceError: x is not defined
    
    </script>
    

    如果两个函数使用了相同的变量名,只要在函数体内,则互相隔离
    内部函数可以访问外部函数的成员,反之不可以
    假设,内部函数变量和外部函数变量重名,函数查找变量则从内到外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

    提升变量的作用域

    function kiki() {
            var x = "x" + y;
            console.log(x);
            var y = "y";
        }
    

    结果:xundefined
    js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值

    function kiki() {
    		var y;
            var x = "x" + y;
            console.log(x);
            y = "y";
        }
    

    所有的变量定义,都定义到最前面
    全局函数

     'use strict';
        var x = 1;
        function f() {
            console.log(x);
        }
        f();
        console.log(x);
    

    规范:
    由于我们所有的全局变量都会绑定到Window上,如果不同的js文件,使用了相同的全局变量,冲突->如何减少冲突?

    <script>
        //唯一全局变量
        var KikiApp = {};
        //定义全局变量
        KikiApp.name = 'kiki';
        KikiApp.add = function (a,b) {
            return a+b;
        }
    </script>
    

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

    <script>
        function aaa() {
            for (let i = 0; i <100 ; i++) {
                console.log(i);
            }
            console.log(i+1);
        }
    </script>
    

    常量const
    在ES6之前如何定义常量,只有用全部大写字母命名的变量就是常量(约束)
    在ES6引入了const关键字,用来指明常量

    <script>
        const PI = '3.14';
        console.log(PI); 
        PI = 123;//报错
    </script>
    

    4.3、方法
    方法就是把函数放在对象里边

    var kiki = {
            name:'kiki',
            birth:1996,
            age: function () {
                var now = new Date().getFullYear();
                return now - this.birth;
            }
        }
    

    调方法:kiki.age()
    this代表什么?始终指向调用它的人,拆开看上边的代码

    function getAge() {
            var now = new Date().getFullYear();
            return now - this.birth;
        }
        var kiki = {
            name:'kiki',
            birth:1996,
            age: getAge
        }
    

    this无法指向的,默认指向调用它的那个对象
    apply
    在js中可以控制this的指向,

    function getAge() {
            var now = new Date().getFullYear();
            return now - this.birth;
        }
        var kiki = {
            name:'kiki',
            birth:1996,
            age: getAge
        }
        getAge().apply(kiki,[]);//this指向了kiki这个对象,参数为空
    

    5、内部对象

    标准对象
    typeof 123
    “number”
    5.1、Date

    <script>
        var now  = new Date();
        now.getFullYear();//年
        now.getMonth();//月 0-11
        now.getDate();//天
        now.getDay();//星期几
        now.getTime();//时间戳 全世界唯一,1970.1.1 0:00:00 毫秒数
    
        console.log(new Date(1592380830481)) //Wed Jun 17 2020 16:00:30 GMT+0800 (中国标准时间)
    
    //now.toLocaleString()
    //"2020/6/17 下午4:04:42"
    </script>
    

    5.2、JSON是什么?轻量级数据交换格式(规范)提升网络传输效率

    在JavaScript一切皆是对象,任何JS支持的类型都可以用JSON来表示
    格式:
    对象都用大括号{}
    数组都用[]
    所有的键值对都是用key:value

    JSON字符串和JS对象之间的转化

    <script>
        'use strict';
        var user = {
            name:'kiki',
            age:24,
            sex:'male'
        }
        //对象转化为JSON字符串
        var JsonUser = JSON.stringify(user);
    
        //JSON字符串解析为对象,参数为JSON字符串
        var obj = JSON.parse(JsonUser);
        //var obj = JSON.parse('{"name":"kiki","age":24,"sex":"male"}')
    </script>
    

    很多人搞不清楚JSON字符串和JS对象的区别

    var obj = {a:'helloa',b:'hellob'}
    var json = '{"a":"helloa","b":"hellob"}'
    
    

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

    6、面向对象编程

    6.1、什么是面向对象
    JavaScript、Java
    类:模板
    对象:具体的实例

    原型:

     var Student =  {
            name:'kiki',
            age:24,
            run: function () {
                console.log(this.name + "run....");
            }
        };
        var xiaoming = {
            name:'xiaoming'
        };
    
        //小明的原型是Student
        xiaoming._proto_ = Student;
    

    class继承:
    class关键字是在ES6引入的

    //定义一个学生类
        class Student{
            constructor(name) {
              this.name = name;
            }
            hello(){
                alert('Hello')
            }
        }
    
    //定义一个学生类
        class Student{
            constructor(name) {
              this.name = name;
            }
            hello(){
                alert('Hello')
            }
        }
    
    
    
        class XiaoStudent extends Student{
            constructor(name,grade) {
                super(name);
                this.grade = grade;
            }
            myGrade(){
                alert('我是小学生');
            }
        }
    
        var xiaoming =  new Student("xiaoming");
        var xiaoHong = new XiaoStudent("xiaohong",1);
    
    console.log(xiaoming)
    VM119:1 
    Student {name: "xiaoming"}
    name: "xiaoming"
    __proto__:
    constructor: class Student
    hello: ƒ hello()
    __proto__: Object
    undefined
    console.log(xiaoHong)
    VM178:1 
    XiaoStudent {name: "xiaohong", grade: 1}
    grade: 1
    name: "xiaohong"
    __proto__: Student
    constructor: class XiaoStudent
    myGrade: ƒ myGrade()
    __proto__: Object
    

    本质:查看对象原型
    原型链(java中称之为继承)

    7、操作DOM对象(重点)

    浏览器介绍
    JavaScript和浏览器有什么关系?
    JavaScript为了能够在浏览器中运行

    BOM:浏览器对象模型
    IE 6~11
    Chrome
    Safari
    FireFox

    三方:
    QQ浏览器
    360浏览器

    window代表浏览器窗口

    Navigator

    Navigator封装了浏览器的信息
    大多数时候我们不会使用navigator对象,因为会被人为修改!
    不建议使用这些属性来判断和编写代码

    screen代表屏幕的尺寸

    location代表当前页面的URL信息

    document代表当前的页面

    HTML DOM文档树
    获取具体的文档树节点

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

    获取cookie
    document.cookie

    劫持cookie原理:获取你的cookie上传到他的服务器

    服务器端可以设置cookie:httpOnly

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

    8、操作DOM对象(重点)

    DOM:文档对象模型
    浏览器网页 就是一个DOM树形结构
    遍历dom节点:得到DOM节点
    删除:
    添加:
    要操作DOM节点,就必须先获得这个DOM节点

    <div id="father">
        <h1>标题一</h1>
        <p id="p1">p1</p>
        <p class="p2">p2</p>
    
    </div>
    
    
    <script>
        var h1 = document.getElementsByTagName('h1');
        var p1 = document.getElementById('p1');
        var p2 = document.getElementsByClassName('p2');
        var father = document.getElementById('father');
    
        var childerns = father.children;//获取父节点下的所有子节点
    

    更新节点

    <div id="id1">
    
    </div>
    
    <script>
        var id1 = document.getElementById('id1');
    

    操作文本
    id1.innerText = ‘456’ 修改文本的值
    id1.innerHTML = '123’可以解析HTML文本标签
    操作JS
    id1.style.color = ‘yellow’

    删除节点

    删除节点先找父节点,再通过父节点删除自己
    注意:删除多个节点的时候,children是在时刻变化的

    插入节点

    我们获得了某个Dom节点,假设这个Dom节点是空,我们可以用innerHTML就可以增加一个元素,但是这个DOM节点已经存在元素了,就不能那么干了!会产生覆盖
    追加:appendChildren()

    9、操作表单(验证)

    表单是什么 form DOM树
    文本框 text
    下拉框 select
    单选框 radio
    多选框 checkbox
    隐藏框 hidden
    密码框 password
    表单目的:提交信息

    获取要提交的信息

    提交表单

    <form action="#" method="post" onclick=" return aaa()">
        <p>用户名:</p><input type="text" id="username" name="username"><br>
        <p>密码:</p><input type="text" id="input-password" ><br>
    
        <input type="hidden" id="md5-password" name="password">
        <!--<p>
            <span>性别:</span>
            <input type="radio" name="sex" value="man" id="boy"><input type="radio" name="sex" value="woman" id="girl" checked></p>-->
    
        <!--绑定事件 onclick被点击-->
        <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;
       }
    </script>
    

    10、jQuery

    jQuery库,里边存在大量的JavaScript

    <!--公式:$(selector).action()-->
    <a href="" id="test-jquery">点我</a>
    
    
    <script>
        
        $('#test-jquery').click(function () {
            alert('hello,jQuery')
        })
    </script>
    

    事件

    鼠标,键盘

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.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 () {
        })*/
        $(function () {
            $('#divMove').mousemove(function (e) {
                $('#mouseMove').text('x:'+e.pageX +'y:'+e.pageY)
            })
        });
    </script>
    
    

    操作DOM

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
    </head>
    <body>
    <ul id="test-ul">
        <li class="js">JavaScript</li>
        <li name="python">Python</li>
    </ul>
    
    <script>
        // document.getElementById('')
        $('#test-ul li[name=python]').text();//获得值
        $('#test-ul li[name=python]').text('设置值');//设置值
        $('#test-ul').html();//获得值
        $('#test-ul').html('<strong>123</strong>')//设置值
    
    
    
    
    
    
    </script>
    </body>
    

    css操作

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

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

    $('#test-ul li[name=python]').show()
    $('#test-ul li[name=python]').hide()
    

    娱乐测试

    $(window).width()
    $(window).height()
    

    ajax():

    $('#form').ajax()
    

    学习技巧:

    巩固jQuery(看小游戏源码)
    去浏览器扒拉样式(巩固HTML、CSS)扒拉网站

    Layer弹窗
    Element UI
    Ant Design

  • 相关阅读:
    Code Review 五问五答
    JavaScript 10分钟入门
    swagger editor使用
    Tyk API网关介绍及安装说明
    Castle 多继承选择
    线程信息的获取和设置
    s3 api接口的调用
    在Hadoop集群上的HBase配置
    OpenStack 单元测试
    在Hadoop集群上的Hive配置
  • 原文地址:https://www.cnblogs.com/kiki-study/p/13656111.html
Copyright © 2020-2023  润新知