首页 > 编程语言 >JavaScript笔记

JavaScript笔记

时间:2024-10-01 10:23:29浏览次数:8  
标签:console log JavaScript 笔记 var document 节点 name

基操

js作为一种脚本语言,可以嵌入到HTML页面中

js是双标签,可以写多行,也可以写一行

  1. 内部标签
<script>
    alert('hello world')
    //...
</script>
  1. 外部引入
<script src="./out.js">
</script>
  1. 浏览器F12调试

20240924150531

  • element:查看html结构,爬数据

  • console:查看js代码,控制台调试

  • source:查看js代码,断点调试

  • network:查看网络请求,接口数据

  • application:查看浏览器缓存cookie

数据类型

20240924151329

原始类型

变量声明:let and var

let var
作用域 块级作用域 函数作用域
特点 避免代码污染,建议使用 可覆盖声明,且能兼容老版本JS

1.变量声明及类型判断

 var x;                       // x 为 undefined
 var x = 5;         	      // 现在 x 为数字
 var x = "John";              // 现在 x 为字符串 
 var x = true;                // 现在 x 为布尔值

 typeof "John"                // 返回 string
 typeof 3.14                  // 返回 number
 typeof false                 // 返回 boolean
 typeof [1,2,3,4]             // 返回 object
 typeof {name:'John', age:34} // 返回 object 

2.原始类型

2.1 字符串

  • 模板字符串
    let name = 'wennzy';
    let age = 20;
    let str = `my name is ${name}, i am ${age} years old`;
    console.log(str);
   let str = ' hello world ';
   console.log(str.length); // 字符串长度
   console.log(str.trim()); // 去除首尾空格
   console.log(str.toUpperCase()); // 转大写
   console.log(str.toLowerCase()); // 转小写
   console.log(str.indexOf('o')); // 查找字符位置
   console.log(str.substring(1, 5)); // 截取字符串
   console.log(str.split(' ')); // 字符串转数组
   console.log(str.replace('hello', 'hi')); // 字符串替换
   console.log(str.includes('hello')); // 字符串包含

2.2 数字

2.3 布尔值

2.4 null

2.5 undefined

对象类型

1.Array数组

  • 可以存储任意类型的元素
  • 数组方法
    let arr = [1, 2, 3, 5, 4];
    console.log(arr.length);        // 数组长度
    console.log(arr.indexOf(3));    // 查找元素对应下标
    console.log(arr.push(6));       // 添加元素到数组末尾
    console.log(arr.pop());         // 删除数组末尾元素
    console.log(arr.shift());       // 删除第一个元素并返回新数组内容
    console.log(arr.unshift(9));    // 在头部插入元素9,并返回新数组内容
    console.log(arr.slice(0, 3));   // 截取数组[0, 3)之间的元素,即[1,2,3]
    console.log(arr.sort());        // 排序
    console.log(arr.reverse());     // 反转
    let arr2 = ['a', 'b', 'c'];
  • 通过下标来取值
    console.log(arr[0]);            // 取第一个元素

2.object对象

  • 若干键值对的集合
    let obj = {
        name: 'wennzy',
        age: 20,
        sayHello: function() {
            console.log('hello');
        }
    }
    //两种访问属性的方式
    console.log(obj.name);          // 取值
    console.log(obj['age']);        // 取值
    obj.sayHello();                 // 调用方法
  • 属性动操作
    obj.gender = 'female';            // 动态添加属性
    obj.age = 20;                     // 修改属性
    delete obj.name;                  // 删除属性
    'name' in obj                     // 判断属性是否存在

Map and Set

Map:

  • 键值对的集合,键可以是任意类型
  • Map方法
    var map = new Map([["tom", 100], ["jack", 90], ["bob", 80]]);
    map.set("alice", 70);           // 添加元素
    map.delete("tom");              // 删除元素
    map.has("jack");                // 判断元素是否存在
    map.get("bob");                 // 获取元素
    map.size;                       // 获取元素个数

Set:

  • 元素的集合,元素无序且不重复
  • Set方法
    //set可以自动去重
    var set = new Set([1,2,3,1,1,1]);
    set.add(4);                     // 添加元素
    set.delete(1);                  // 删除元素
    set.has(2);                     // 判断元素是否存在
    set.size;                       // 获取元素个数

流程控制

1.条件语句

    if (condition) {
        // do something
    } else if (condition) {
        // do something
    } else {
        // do something
    }

2.循环语句

    var arr = [12,32,9,74,81,30,5]

    //iterator遍历arr数组
    for (let i = 0; i < arr.length; i++) {
        console.log(arr[i])
    }

    for(let a of arr) {
        console.log(a)
    }

    arr.foreach(function(value) {
        console.log(value)
    })

    while (condition) {
        // do something
    }

    do {
        // do something
    } while (condition)

函数及面向对象

函数

1.定义函数

两种方式:绝对值函数

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

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

    //调用函数
    abs(10);
    abs(-10);

2.arguments对象

  • 在函数内部,可使用argument对象获取所有参数
  • arguments对象是一个类数组对象,可以用length属性获取参数个数,可以和数组一样使用索引,但是没有数组的方法
  • arguments对象只能在函数内部使用
    function eg(a,b) {
        console.log("a=>"+a)
        console.log("b=>"+b)
        if(arguments.length > 2){
            for(var i=0;i<arguments.length;i++){
                //...
            }
        }

3.rest参数

  • 只能写在最后一位形参,且用...标识
    function args(a,b,...rest) {
        console.log(a);
        console.log(b);
        console.log(rest);
    }

    args(1,2,3,4,5,6,7,8,9,10)
    //得到的输出为:1,2,[3,4,5,6,7,8,9,10]

4.变量作用域

方法

1.方法的定义和调用

    var wennzy = {
        name: 'wennzyZn',
        birthYear: 2004,
        age: function(){
            var now = new.Date().getFullYear();
            return now - this.birthYear;
        }
    }

    //调用属性
    wennzy.name;

    //调用方法,注意()
    wennzy.age();

2.apply

  • apply方法接收两个参数,第一个参数是this的指向,第二个参数是数组或类数组对象
  • apply方法会自动调用函数

闭包

箭头函数

创建对象

class继承

原型链继承

常用内部对象

1.Data

  • 获取时间戳
    var now = new Date();
    now.getFullYear();      //年
    now.getMonth();         //月
    now.getDate();          //日
    now.getDay();           //星期几
    now.getHours();         //小时
    now.getMinutes();       //分钟
    now.getSeconds();       //秒
    now.getTime();          //时间戳

2.JSON

  • 轻量级的数据转换格式,与XML相比,是更小,更快,更易解析的数据交换语言

  • BSON

    • Binary JSON
  • 格式

    • 对象:{}
    • 数组:[]
    • 键值对:" key:value "
  • 对象转为JSON格式数据

    var user = {
        name: 'wennzyZn',
        age: 20,
        gender: 'female',
        address: {
            university: 'CUMT',
            street: 'No.1'
        }
    }
    
    var jsonUser = JSON.stringify(user);
    
  • JSON格式数据转为对象

    var jsonUser = '{"name":"wennzyZn","age":20,"gender":"female","address":{"university":"CUMT","street":"No.1"}}';
    var user = JSON.parse(jsonUser);
    
  • JS与JSON对象的区别(原生操作,vue中自动渲染)

    JS JSON
    obj= {}; '{}'
    成员 变量,a='helloa' 键值对,"a"="helloa"
    被转换函数 var jsonObj=JSON.stringify(obj) var jsObj=JSON.parse(jsonObj)
    js转为json字符串 json解包为js

3.Ajax

  • Asynchronous JavaScript and XML,异步JavaScript和XML

  • 无需重新加载整个网页的情况下,能够更新部分网页的内容

  • 原生js写法,xhr异步请求

    • xhr:一种JavaScript对象,用于在浏览器中进行异步数据交换
  • jQuery 和 Axios 都是对 AJAX 的封装,提供更高级的 API

面向对象编程 (OOP)

1.__proto__原型

    var Student = {
        name: 'wennzyZn',
        age: 20,
        run: function() {
            console.log(this.name + ' run...');
        }
    };

    //定义原型
    var zoey = {
        name: 'zoey'
    };  
    }
    zoey.__proto__ = Student;
    //调试
    zoey.run();

    var Bird = {
        fly: function() {
            console.log(this.name + ' fly...');
        }
    }

    //允许中途修改原型
    zoey.__proto__ = Bird;
    zoey.fly();

2.class继承

ES6引入了class关键字,可以定义类

    class Student {
        constructor(name) {
            this.name = name;
        }

        hello() {
            alert('Hello, ' + this.name + '!');
        }
    }
    var xiaoming = new Student('小明');

    //继承父类Studenet
    class PrimaryStudent extends Student {
        constructor(name, grade) {
            super(name); // 调用父类的构造方法
            this.grade = grade;
        }

        myGrade() {
            alert('I am at grade ' + this.grade);
        }
    }
    var xiaohong = new PrimaryStudent('小红',1);

3.原型与原型链

操作BOM元素

Browser Object Model,浏览器对象模型

1.window

    //浏览器窗口信息
    window.innerHeight;
    window.innerWidth;
    window.outerHeight;
    window.outerWidth;

2.navigator

    //浏览器属性
    navigator.appName;
    navigator.appVersion;
    navigator.userAgent;
    navigator.platform;

3.screen

    //第三方屏幕信息
    screen.width;
    screen.height;
    screen.colorDepth;

4.location

    //当前URL信息
    location.href;      //获取当前URL的地址
    location.protocol;  //协议
    location.host;      //域名
    location.port;      //端口
    location.pathname;  //路径
    location.search;    //查询字符串
    location.hash;      //锚点
    location.reload();  //刷新页面
    location.assign('http://www.baidu.com');  //跳转页面

5.Document

    //当前页面信息
    document.title;     //获取页面标题
    document.cookie;    //获取页面cookie
    document.URL;       //获取当前页面的URL
    document.domain;    //获取当前页面的域名
    document.referrer;  //获取当前页面的来源URL
    document.getElementById('id');  //获取指定id的元素,具体的文档树节点
    var div = document.getElementById('myDiv');

劫持cookie原理

6.History

    //浏览器历史记录
    history.back();  //后退
    history.forward();  //前进
    history.go(-1);  //前进或后退指定步数

操作DOM元素 (I)

Document Object Model,文档对象模型

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

1.获取DOM节点

<body id='father'>
    <h1>Title</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
    
<script>
    //获取DOM节点
    var h1 = document.getElementById('id');             //获取指定id的元素,具体的文档树节点
    var p1 = document.getElementsByTagName('tag');      //获取指定标签名的元素,返回一个数组
    var p2 = document.getElementsByClassName('class');  //获取指定类名的元素,返回一个数组
    var father = document.getElementById('father');     //获取父节点
    var childrens = father.children;                    //获取父节点的所有子节点
    var firstChild = father.firstChild;                 //获取父节点的第一个子节点

</script>
</body>

原生代码操作DOM,后续会用jQuery来简化操作

2.更新DOM节点

    //页面自身属性
    <div id='id1'>
    
    </div>
    <script>
        var id1= document.getElementById('id1');
    </script>
    //网页console调试
    id1.innerText = '123';                              //修改文本内容
    id1.innerHTML = '<strong>456</strong>';             //解析HTML标签
    id1.style.color = 'red';                            //修改CSS,字体颜色
    id1.style.fontSize = '20px';                        //修改CSS,字体大小
    id1.style.padding = '2em';                          //修改CSS,内边距(em 是一个相对长度单位,表示当前元素的字体大小,内边距设置为父元素字体大小的 2 倍)

20240928144001

3.删除

先获取父节点,再通过父节点删除自己

    <div id='father'>
        <h1>Title</h1>
        <p id="p1">p1</p>
        <p class="p2">p2</p>
    </div>
    <script>
        var father = document.getElementById('father');
        var self = document.getElementById('p1');
        var father'=p1.parentElement;
    </script>
    //console调试
    father.removeChild(self)                           //删除p1节点
    father.removeChild(father.children[0])             //删除第一个子节点
    father.children                                    //获得父节点的所有子节点
    father.children[0]                                 //获得父节点的第一个子节点

删除多个节点时,子节点的数量及前后节点是动态变化

4.追加

    <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 list=document.getElementById("list");
        var js=document.getElementById("js");
    </script>
    list.appendChild(js);                                //在最后追加节点

20240928152159

5.创建

DOM节点为空时,可以通过innerHTML直接添加(节点为空:指的是一个 DOM 节点内部没有任何子节点或文本内容)

DOM节点非空时,需要先创建新的节点,再插入

    //创建新的标签
    var newP=document.createElement('p');               
    newP.id='newP';
    newP.innerText='hello';
    list.appendChild(newP);                             //在最后追加节点
    var myScript=document.createElement('script');
    myScript.setAttribute('type','text/javascript');    //设置标签属性

    //创建一个style标签
    var myStyle=document.createElement('style');        //创建一个空style标签
    myStyle.setAttribute('type','text/css');
    myStyle.innerHTML='body{background-color:wheat;}';  //设置标签内容

    document.getElementById('list').appendChild(myStyle);

6.插入

    <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 list=document.getElementById("list");
        var js=document.getElementById("js");
        var ee=document.getElementById("ee");
        var me=document.getElementById("me");

        //父节点list用insertBefore函数
        list.insertBefore(js,ee);                        //在ee节点前插入js节点
    </script>

操作表单

1.基操

<form action="post">
    <!-- 填空 -->
    <p>
    <span>userName</span>
    <input type="text" id="userName">
    </p>
    <!-- 多选 -->
    <p>
     <span>sex:</span>
     <input type="radio" name="sex" value="man">male
     <input type="radio" name="sex" value="female">female
    </p>

    //提交表单
    <input type="submit" >

</form>

<script>
    var input_text=document.getElementById('userName');
    //get value
    input_text.value;
    //modify value
    input_text.value='zoey'; 
</script>

2.表单提交验证

    <form action="post">
        <p>
            <button type="button" onclick="fc()" >submit</button>
        </p>
    </form>
    
    <script>
        function fc(){
            //获取表单数据
            var userName=document.getElementById('userName').value;
            var password=document.getElementById('password').value;
            alert(userName+password);
        }
    </script>

3.前端密码MD5加密

执行一个表单提交的拦截函数MD5

    <!--在头部引入MD5tools-->
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>jsDraft</title>
        <!--MD5工具类-->
        <script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.10.0/js/md5.min.js"></script>
    </head>
    <script>
        function fc(){
            //获取表单数据
            var userName=document.getElementById('userName').value;
            var password=document.getElementById('password').value;
            //MD5加密
            var md5_password=md5(password);
            console.log(userName);
            console.log(md5_password);

            //判断校验表单内容,true为通过提交,false为阻止提交
            return false;
        }
    </script>

jQuery

中文参考手册:https://hemin.cn/jq/

20240928174953

Downloading jQuery using npm: npm install jquery

公式: $(selector).action()

    <!--引入jquery:本地在线导入+cdn引入-->
    <script src="lib/jquery.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

标签:console,log,JavaScript,笔记,var,document,节点,name
From: https://www.cnblogs.com/Weenz-y/p/18440633

相关文章

  • 教你如何免费获取股票数据用python、JavaScript (Node.js)、JAVA等多种语言的实例代码
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • C/C++算法编程笔记(2024.9.26-9.30)
    一、并查集学习一:1、寻找根节点(两种)intfind(intx){if(x!=city[x]) city[x]=find(city[x]);returncity[x];}intfind(intx){ returnfa[x]==x?x:fa[x]=find(fa[x]);}2、合并不同集合voidmerge(intx,inty){inta=find(x);intb......
  • JavaScript 网页设计案例 简单的电商案例 页面切换 数据搜索 动态网页
    JavaScript网页设计案例简单的电商案例页面切换数据搜索动态网页1.案例描述以下是一个简单的产品展示网页,用户可以通过点击不同的产品类别按钮来查看相应的产品,且在鼠标悬停时显示产品详情。页面还将包含一个搜索框,用户可以输入关键词来筛选产品。2.文件结构-......
  • 基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动
    这段代码实现了一个基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动效果。以下是代码的详细解释说明:HTML结构基础设置:<!DOCTYPEhtml> 声明文档类型为HTML5。<htmllang="en"> 指定文档语言为英文。<metacharset="UTF-8"> 和......
  • javascript-Web APLs (一)
    WebAPl基本认知变量声明const优先,如果变量会改变,就用letconst声明的值不能更改,而且const声明变量的时候需要里面进行初始化l但是对于引用数据类型,const声明的变量,里面存的不是值,不是值,不是值,是地址比如://错误写法constgirlfriend=[]girlfr......
  • 什么是javascript的事件循环
    JavaScript的事件循环(EventLoop)是其执行机制的核心,用来处理异步操作,使得JavaScript能够实现非阻塞式的单线程异步编程。为了理解事件循环,首先要了解JavaScript是单线程的语言,这意味着它一次只能执行一个任务。但在实际应用中,比如I/O操作(网络请求、定时器、用户事......
  • [编程笔记] 工具的升级逻辑
    记得去年来这边时,曾面过一家公司,要做WPF项目,当时问到“如果让你做一个安装程序,如何实现更新?说下思路就行”,当时我回复的是文件有更新时从服务器下载最新dll,覆盖到本地目录即可。那个时候以为很简单,现在自己接触到以后,发现这里吗的细节还挺多,因此记录一番。从服务......
  • 【学习笔记】TLS/SSL握手
    前言:本篇将介绍TLS握手的实际握手过程,TLS握手创建了Client和Server之间“被保护的通道”,2个单向通道用来保护批量数据的传输(通过Confidentiality、Integrity和Authentication),一个通道是从Client到Server,另一个是从Server到Client。本篇将介绍最基础的握手-即握手采用的是RSA......
  • 3. 算法笔记-对数器
    对数器是一个非常重要的自我验证技巧,其实现步骤如下:(1)方法A(2)方法B(3)随机样本产生器(4)用相同的样本验证方法A和方法B,比对结果是否一致。(5)若出现样本,使得结果不一致,查找原因,进行改进。(6)否则,方法验证成功。#include<vector>#include<cstdio>#incl......
  • 苹果笔记本安装双系统,如何开启虚拟化
    1开启以下Windows功能并重启Hyper-v虚拟机监控程序,如果不能开,也可以不开。2下载rEFInd-bin软件并解压https://sourceforge.net/projects/refind/ 我的下载目录是:D:\refind-bin-0.14.23编辑文件将refind目录下的refind.conf-sample的文件名改为refind.conf,notepad++打开......