四天学会JS高阶(学好vue的关键)——构造函数数据常用函数(理论+实战)(第二天)

一、对象创建引发构造函数产生

1.1 创建对象三种方式:

  1. 利用对象字面量创建对象
 const obj = {
            name: '佩奇'
        }

注:对象字面量的由来:即它是直接由字面形式(由源代码直接)创建出来的对象,而不是通过构造函数或者方法间接构成的,所以就叫做对象字面量。

  1. 利用 new Object 创建对象
   // 两种添加属性的方式
   // const obj = new Object()
        // obj.uname = '哈哈哈哈'
        // console.log(obj);
        const obj = new Object({ uname: '哈哈哈哈' })
        console.log(obj);

注:当使用Object时,实际上是调用了js内置的一个构造函数并且通过new关键字来创建一个新的对象。
3. 利用构造函数创建对象 往下看。。。。。

1.2 构造函数

构造函数定义:就是一个函数,用来创建快速多个类似的对象,将多个对象的公共属性封装在一个函数里

注意:创建对象的时候首字母大写;使用函数创建对象通过new关键字操作符。

        //创建一个猪猪 构造函数
        function Pig (uname, age) {
            this.unmae = uname
            this.age = age
        }
        // 通过new关键字调用函数
        // 实例化构造函数
        // console.log(new Pig('佩奇', 6))
        const p = new Pig('佩奇', 6)
        console.log(p);

另外:同new Object()、 new Date() 一样都是实例化构造函数,js内置了Date、Object构造函数,然后通过new关键字实现实例化函数,最后实现实例化对象

const date = new Date('2021-3-4')
        console.log(date);
 function Goods (name, price, count) {
            this.nam = name
            this.price = price
            this.count = count
        }
        const mi = new Goods('小米', 1999, 20)
        console.log(mi)
        const hw = new Goods('华为', 1999, 50)
        console.log(hw)

总结:
1.new关键字调用函数的行为被称为实例化
2.构造函数无return,构造函数自动返回构建的新的对象。
什么时候需要return?就是函数比起输出结果,将返回结果给其他程序,然后程序使用这个结果做其他事情更重要的时候。这个具体见小编的 js——函数篇。
3.实例化构造函数时没有参数时可以省略 ()

实例化执行过程

在这里插入图片描述

①构造函数先调用,加上new,立刻创建一个空对象 ②this指向空对象
③执行构造函数代码,利用this,添加属性.(具体是通过形参传入实参, this指向新对象,新对象添加一个name属性
这样实参通过形参就传入到了对象中 生成了对象属性 对象也有了 属性也有了 ,构造函数就会自动返回一个新的对象 返回的新对象 由new Pig接收。)
④.返回新对象

1.3 实例成员 静态成员

实例成员
通过构造函数创建的对象称为实例对象;
实例对象中的属性和方法称为实例成员 (实例属性 实例方法)

下面举一个不含有参数的利用构造函数创建实例对象:

function Pig () {
            this.name = '佩奇'
            this.sayHi = function () {
                console.log('你好')
            }
        }
        const p = new Pig()
        console.log(p.name)
        p.sayHi()

注:

  1. 实例对象的属性和方法即为实例成员
  2. 为构造函数传入参数,动态创建结构相同但值不同的对象
  3. 构造函数创建的实例对象彼此独立互不影响

静态成员
构造函数的属性和方法被称为静态成员 静态成员只能构造函数访问。

 function Person () {
            // 省略实例成员
        }
        // 静态属性
        Person.eyes = 2
        Person.arms = 2
        // 静态方法
        Person.walk = function () {
            console.log('人嗯呢')
            console.log(this.eyes)
        }
        new Person()
        console.log(Person.eyes)
        console.log(Person.arms)
        // 死记硬背:遇到方法一定要想到需要调用 并且不用打印调用  方法里面有结果的输出
        // console.log(Person.walk);//错误
        Person.walk()

说明:

  1. 构造函数的属性和方法被称为静态成员
  2. 一般公共特征的属性或方法静态成员设置为静态成员
  3. 静态成员方法中的 this 指向构造函数本身

二、内置构造函数

一切皆对象

我发现因为构造函数的存在,所以都可以new出来一个实例对象

在这里插入图片描述
主要的数据类型有6种:
基本数据类型:字符串、数值、布尔、undefined、null
引用数据类型:对象、数组等。
字符串.Length

 // const str = 'pink'
        // // 有属性
        // console.log(str.length)
        // const num = 12
        // // 有方法
        // console.log(num.toFixed(2));
        // js底层完成 把简单数据类型包装成了引用数据类型
        // const str = new String('pink')

为什么任何数据都有属性和方法?

原理:其实在js的底层 将字符串类似转化为了对象,也就存在了属性和方法
基本包装类型就是基本数据类型包装成了复杂数据类型
实字符串、数值、布尔、等基本类型也都有专门的构造函数,这些我们称为包装类型。
JS中几乎所有的数据都可以基于构成函数创建
包装类型
 String,Number,Boolean 等基本数据类型

2.1 Object

Object 是内置的构造函数,用于创建普通对象。

使用 Object 创建对象

const aa = new Object({ uname: '哈哈', age: 18 })
console.log(aa);	

三个常用静态方法(静态方法就是只有构造函数可以调用的,在这里是只有Object可以调用的)

 const o = { uanme: 'pink', age: 18 }
        // 1.Object.keys 静态方法获取对象中所有属性(键) 返回数组
        console.log(Object.keys(o))
        // 2.Object.values 静态方法获取对象中所有属性值 返回数组
        console.log(Object.values(o))
        // 3.Object. assign 静态方法常用于对象拷贝 经常使用的场景给对象添加属性
        const oo = {}
        Object.assign(oo, o)
        console.log(oo)
        // 通过Object给对象添加属性
        Object.assign(o, { gender: '女' })
        console.log(o)
        console.log(Object.keys(o));

2.2 Array

Array 是内置的构造函数,用于创建数组

const arr = new Array(3, 5)
console.log(arr);

创建数组建议使用字面量创建,不用 Array构造函数创建

数组常见实例方法:
在这里插入图片描述
数组中的reduce方法:
这里不知道大家会不会有个问题,为什么function函数没有被调用呢,就能够返回值,这是因为数组中的reduce方法是js内置函数自定义的方法,不需要我们返回,由内部操作,我们只需要知道function被当做参数传入的时候是回调函数,最后返回的结果用一个变量来接收即可。

        // 数组reduce方法 两个参数  回调函数  初始值
        // arr.reduce(function (上一次值,当前值) { }, 初始值)
        const arr = [1, 5, 7]
        // 1.没有初始值
        const total = arr.reduce(function (prev, current) {
            return prev + current
        })
        console.log(total)
        // 2.有初始值
        const total1 = arr.reduce(function (prev, current) {
            return prev + current
        }, 10)
        console.log(total1)
        // 3.箭头函数表示
        const total2 = arr.reduce((prev, current) => prev + current, 20)
        console.log(total2);

forEach 遍历数组 不返回新数组 也就是不返回值 就想着,遍历数组,就跟for循环一样,什么时候还有返回值呢!

<script>
        const arr = ['red', 'green', 'pink']
        // item是必须要写的 
        // foreach就是纯遍历  加强版的for循环  适合于遍历数组对象
        const result = arr.forEach(function (item, index) {
            console.log(item)//每个数组元素
            console.log(index)//索引号
        })
        console.log(result)//不返回值
    </script>

filter 筛选数组 所以一定会返回一个新的数组 也就是有返回值

<script>
        const arr = [10, 20, 30]
        // const newArr = arr.filter(function (item, index) {
        //     // 也有用item和index
        //     // console.log(item)
        //     // console.log(index)
        //     return item >= 20
        // })
        // console.log(newArr);
        // 写成箭头函数
        const newArr = arr.filter(item => item >= 20)
        console.log(newArr);
    </script>

map 迭代数组 返回新数组
如果没有进行字符串拼接等操作,默认是直接迭代数组,返回一个新的数组,和forEach方法类似,一个返回数组一个不返回

 <script>
        const arr = ['red', 'blue', 'pink']
        const newArr = arr.map(function (ele, index) {
            return ele + '颜色'
        })
        console.log(newArr)
        // 字符串是黑色的
        console.log(JSON.stringify(newArr))
        console.log(arr.join(''))
        console.log(newArr.join('|'));
    </script>

综合案例一:
需求一:
把尺码和颜色 拼成特定格式要隔开():
思路:获得所有属性值,然后拼接字符串即可
①获得所有属性值:Object.values()返回的是数组
②拼接数组join 这样就可以转换为字符串了

这里我们需要注意,因为我们要求薪资和,可是薪资在每个对象中,而对象又是在数组中,所以当我们直接使用数组进行reduce累计求和,需要注意里面的参数实际上是映射到了每一个对象上

        // 对象数组
        const arr = [{
            name: '张三',
            salary: 10000
        }, {
            name: '李四',
            salary: 10000
        }, {
            name: '王五',
            salary: 20000
        },
        ]
       // 映射上每一个对象
        const total = arr.reduce((prev, current) => {
            console.log(prev)
            console.log(current)
        })

有结果可知,有undefined,根据reduce的执行过程可知,当没有添加初始值时,prev执行数组的第一个元素,在本案例中,是第一个对象,所以就会输出第一个对象,但是current会输出第二个对象,但是因为reduce通过多次遍历元素,每一次循环遍历都会将元素加在一起,但是显然我们求得的元素使对象不可能求和,所以得到undefined,因为每一轮循环返回的值回作为新一轮的prev,所以prev会返回一个undefined,紧接着current会返回之前遍历数组元素的下一个元素。
在这里插入图片描述
所以我们现在要解决的是怎么拿到数组元素对象中salary薪资,可以通过对象.属性拿到 但是注意一定要写成prev和current.salary,以及添加初始值

 // 对象数组
        const arr = [{
            name: '张三',
            salary: 10000
        }, {
            name: '李四',
            salary: 10000
        }, {
            name: '王五',
            salary: 20000
        },
        ]
        const total = arr.reduce((prev, current) => {
            // console.log(prev)
            // 在数组对象中累加和 不写初始值  错误  prev.salary第一次迭代的时候拿到的是元素 在我们这个代码中是第一个数值 问题是第二次迭代的时候我们想要实现的是prev拿到的是第一次迭代的返回值,显然如果我们非要写prev.salary就拿不到第一次迭代的返回值接着就有问题了,所以这里我们就用到了初始值
            // return prev.salary + current.salary
            // return prev + current.salary
        }, 0)
        console.log(total)
       const total1 = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)
       console.log(total1)

Array数组常见方法

  // 单纯数组 对数组进行查找满足条件的元素
        const arr = ['red', 'blue', 'green']
        const re = arr.find(function (item) {
            return item === 'blue'
        })
        console.log(re)
        //数组对象
        const arr1 = [
            {
                name: '小米',
                price: 1999
            }, {
                name: '华为',
                price: 2913
            }
        ]
        // find查找满足条件的元素 因为是数组对象 所以查找满足条件的对象 只筛选满足条件的第一个元素
        const mi = arr1.find(function (item) {
            console.log(item)
            console.log(item.name)
            return item.name === '小米'
        })
        // 筛选每一个元素
        const arr2 = [10, 20, 30]
        const flag = arr.every(item => item >= 20)
        console.log(flag);

2.3 String

js底层也见了构造函数进行包装

String常见方法 split把字符串转换为数组

  //1.split把字符串转换为数组  和join()相反
        const str = 'pink,red'
        const arr = str.split(',')
        console.log(arr)
        const str1 = '2022-4-8'
        const arr1 = str1.split('-')
        console.log(arr1)
//2. 字符串的截取 substring(开始的索引号[,结束的索引号])
        // 2.1 如果省略结束的索引号 默认取到最后
        // 2.2 结束的索引号不包含在想要截取的部分
        const str = '今天很开心啊'
        // 不包含截取
        console.log(str.substring(3, 5))
      // 3.startwith 判断是不是以某个字符开头
        const str = 'pink老师上课中'
        console.log(str.startsWith('ink'))
          // 4.includes 判断某个字符是不是包含在一个字符串中 以及该字符的位置
        // 从字符串中开始搜索哈哈哈哈的位置  也就是开始搜索的位置
        const str = '我是pink老师'
        console.log(str.includes('pink'))
        console.log(str.includes('pink', 3));

基于字符串的小赠品案例;字符串转换为数组的而案例 并且使用join展示在页面上

// 两个小赠品放在了字符串中,我们需要将这两个赠以页面要求的格式放在页面上 并且是两行
// 思路:将字符串通过split转化为数组,利用map方法将数组进行遍历拿到两个元素并且以页面要求的格式返回 最后获取页面元素进行innerHTML

  const gift = '50g的茶叶,清洗球'
        // const str = gift.split(',').map(function (item) {
        //     return `<span>赠品 ${item}</span></br>`
        // }).join('')
        // console.log(str)
        // document.querySelector('div').innerHTML = str
        // 箭头函数表示
        document.querySelector('div').innerHTML = gift.split(',').map(item => `<span>赠品 ${item}</span></br>`).join('')

toFixed()

 // 方法 可以让数字制定保留的小数位数
        const num = 10.928
        console.log(num.toFixed(2))
        const num1 = 10
        console.log(num1.toFixed(2));

基于构造函数&数据常用函数综合案例

功能实现:购物车展示 包括渲染图片 标题 颜色 价格 赠品等数据

  1. 把整体的结构直接生成然后渲染到大盒子list里面
  2. 遍历并且返回值:map方法
  3. 最后计算总价模块求和:reduce方法
  4. 具体思路:
    ①map遍历数据 先写死数据 join转化为字符串 追加给list的innerHTML
    ②更换数据 先更换不需要处理的数据 图片 商品名称 单价 数量
    对象结构的方式 单价保留两位小数
    ③更换数据——处理规格文字模块
    获取每个对象里面的spec,上面对象解构添加spec
    获得所有属性值 Object.values()返回的是数组
    拼接数组是join(‘’)这样就可以转换为字符串了
    ④更换数据——处理赠品模块
    获取每个对象里面的gift,上面对象解构添加gift
    思路:把字符串拆分为数组,这样两个赠品就拆分开了 用split()
    利用map遍历数组,同时把数组元素生成到span里面,并且返回
    因为返回的是数组 所以需要转换为字符串 用join‘’()
    注意要判断是否有gift属性 没有的话不需要渲染
    利用变成的字符串然后写到p.name里面

在这里插入图片描述

<script>
        const goodsList = [
            {
                id: '4001172',
                name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',
                price: 289.9,
                picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',
                count: 2,
                spec: { color: '白色' }
            },
            {
                id: '4001009',
                name: '竹制干泡茶盘正方形沥水茶台品茶盘',
                price: 109.8,
                picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',
                count: 3,
                spec: { size: '40cm*40cm', color: '黑色' }
            },
            {
                id: '4001874',
                name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',
                price: 488,
                picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',
                count: 1,
                spec: { color: '青色', sum: '一大四小' }
            },
            {
                id: '4001649',
                name: '大师监制龙泉青瓷茶叶罐',
                price: 139,
                picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',
                count: 1,
                spec: { size: '小号', color: '紫色' },
                gift: '50g茶叶,清洗球,宝马, 奔驰'
            }
        ]
        // 因为是数组对象  所以使用map遍历数组 有返回值
        document.querySelector('.list').innerHTML = goodsList.map(item => {
            // console.log(item)
            // 通过对象解构拿到想要的属性
            const { picture, name, count, price, spec, gift } = item
            //规格文字模块  
            const text = Object.values(spec).join('/')
            // 计算小计模块 单价*数量
            const subTotal = ((price * 100 * count) / 100).toFixed(2)
            //处理赠品模块
            const str = gift ? gift.split(',').map(item => `<span class="tag">【赠品】10${item}</span>`).join('') : ''
            //这里在返回页面的时候先返回一个死的数据  便于梳理思路
            return `<div div class="item" >
                <img src=${picture} alt="">
                    <p class="name">${name}<span class="tag">【赠品】10优惠券</span></p>
                    <p class="spec">${text}</p>
                    <p class="price">${price}</p>
                    <p class="count">x${count}</p>
                    <p class="sub-total">579.80</p>
                </div> `
        }).join('')
        // 3.合计模块
        const total = (goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) / 100, 0)).toFixed(2)
        document.querySelector('.amount').innerHTML = total

    </script>

三 、 完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .list {
            width: 990px;
            margin: 100px auto 0;
        }

        .item {
            padding: 15px;
            transition: all .5s;
            display: flex;
            border-top: 1px solid #e4e4e4;
        }

        .item:nth-child(4n) {
            margin-left: 0;
        }

        .item:hover {
            cursor: pointer;
            background-color: #f5f5f5;
        }

        .item img {
            width: 80px;
            height: 80px;
            margin-right: 10px;
        }

        .item .name {
            font-size: 18px;
            margin-right: 10px;
            color: #333;
            flex: 2;
        }

        .item .name .tag {
            display: block;
            padding: 2px;
            font-size: 12px;
            color: #999;
        }

        .item .price,
        .item .sub-total {
            font-size: 18px;
            color: firebrick;
            flex: 1;
        }

        .item .price::before,
        .item .sub-total::before,
        .amount::before {
            content: "¥";
            font-size: 12px;
        }

        .item .spec {
            flex: 2;
            color: #888;
            font-size: 14px;
        }

        .item .count {
            flex: 1;
            color: #aaa;
        }

        .total {
            width: 990px;
            margin: 0 auto;
            display: flex;
            justify-content: flex-end;
            border-top: 1px solid #e4e4e4;
            padding: 20px;
        }

        .total .amount {
            font-size: 18px;
            color: firebrick;
            font-weight: bold;
            margin-right: 50px;
        }
    </style>
</head>

<body>
    <div class="list">
        <!-- <div class="item">
      <img src="https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg" alt="">
      <p class="name">称心如意手摇咖啡磨豆机咖啡豆研磨机 <span class="tag">【赠品】10优惠券</span></p>
      <p class="spec">白色/10</p>
      <p class="price">289.90</p>
      <p class="count">x2</p>
      <p class="sub-total">579.80</p>
    </div> -->
    </div>
    <div class="total">
        <div>合计:<span class="amount">1000.00</span></div>
    </div>
    <script>
        const goodsList = [
            {
                id: '4001172',
                name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',
                price: 289.9,
                picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',
                count: 2,
                spec: { color: '白色' }
            },
            {
                id: '4001009',
                name: '竹制干泡茶盘正方形沥水茶台品茶盘',
                price: 109.8,
                picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',
                count: 3,
                spec: { size: '40cm*40cm', color: '黑色' }
            },
            {
                id: '4001874',
                name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',
                price: 488,
                picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',
                count: 1,
                spec: { color: '青色', sum: '一大四小' }
            },
            {
                id: '4001649',
                name: '大师监制龙泉青瓷茶叶罐',
                price: 139,
                picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',
                count: 1,
                spec: { size: '小号', color: '紫色' },
                gift: '50g茶叶,清洗球,宝马, 奔驰'
            }
        ]
        // 1.根据数据渲染页面
        document.querySelector('.list').innerHTML = goodsList.map(item => {
            // console.log(item) //每一条对象   四条数据 遍历了四次 
            const { picture, name, count, price, spec, gift } = item
            // 规格文字模块
            const text = Object.values(spec).join('/') //Object.values(spec)获取的是数组
            // 计算小计模块 单价*数量
            const subTotal = ((price * 100 * count) / 100).toFixed(2)
            // 处理赠品模块
            const str = gift ? gift.split(',').map(item => `<span class="tag">【赠品】10${item}</span>`).join('') : ''
            return `
            <div class="item">
    <img src=${picture} alt="">
    <p class="name">${name} ${str}</p>
    <p class="spec">${text}</p>
    <p class="price">${price.toFixed(2)}</p>
    <p class="count">x${count}</p>
    <p class="sub-total">${subTotal}</p>
    </div>`
        }).join('')

        //3.合计模块
        const total = (goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) / 100, 0)).toFixed(2)
        // console.log(total);
        document.querySelector('.amount').innerHTML = total


    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/634493.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开箱测评!吸猫毛除味神器,希喂FreAir Lite宠物空气净化器实测

掉毛季又来了&#xff0c;猫咪的毛发满天飞&#xff0c;怎么办&#xff1f;我家掉毛怪一到季节就开始掉老多毛&#xff0c;关键还喜欢在家里打架跑酷&#xff01;天上地下都是毛&#xff01;为了减少家里空气中浮毛&#xff0c;你做过那些努力呢&#xff1f;最近猫掉毛掉的&…

设置height:100%不生效的原因

之前网课案例总是不屑于去看&#xff0c;因为总觉得太花时间&#xff0c;但是不可否认的是&#xff0c;认真去看还是会有收获的&#xff0c;而且常有意外收获 昨天在看实现动画效果的综合案例中&#xff0c;意外解决了我长久以来的一个疑问&#xff1a;为什么给元素设置height…

论文精读--InstructGPT

模型效果取决于数据效果&#xff0c;但在精细度上控制不够&#xff0c;只是大力出奇迹&#xff0c;这样有很大的问题&#xff1a; &#xff08;1&#xff09;数据量太多或者没有这方面的数据&#xff0c;模型学不会怎么办 &#xff08;2&#xff09;安全性问题&#xff0c;模…

踩坑——纪实

开发踩坑纪实 1 npm安装1.1 查看当前的npm镜像设置1.2 清空缓存1.3 修改镜像1.4 查看修改结果1.5 重新安装vue 2 VScode——NPM脚本窗口找不到3 springboot项目中updateById()失效4 前端跨域4.1 后端加个配置类4.2 CrossOrigin注解 5 路由出口6 springdoc openapi3 swagger3文件…

VMware 虚拟机 VM10~17系列安装教程(功能最强大的电脑虚拟机软件)

前言 VMware是功能最强大的虚拟机软件&#xff0c;用户可以在虚拟机同时运行各种操作系统&#xff0c;进行开发、测试、演示和部署软件&#xff0c;虚拟机中复制服务器、台式机和平板环境&#xff0c;每个虚拟机可分配多个处理器核心、主内存和显存。 系统要求 VM17 VM16&am…

《ESP8266通信指南》番外-(附完整代码)ESP8266获取DHT11接入(基于Lua)

前言 此篇为番外篇,是 ESP8266 入门的其他功能教程,包括但不限于 DHT11 驱动TCP 通信Thingsboard 平台的接入阿里云物联网云平台接入华为云平台接入 1. 小节目标 使用 Lua 驱动 DHT11 传感器,获取温湿度的值 2. 进入主题 NodeMCU 基于 LUA 相关资料 官方文档&#xff1a;…

【每日刷题】Day47

【每日刷题】Day47 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 2. 2404. 出现最频繁的偶数元素 - 力扣&am…

Visual Basic6.0零基础教学(5)—VB的输入输出,顺序和选择结构

VB的输入输出和控制结构 文章目录 VB的输入输出和控制结构前言一、输入输出1. InputBox 输入2.MsgBox输出print 输出 二、控制结构1.顺序结构赋值语句 2.选择结构if ... then单分支if ... then...else.... 双分支if ... then... elseif ... then .. else ... 多分支Select Case…

视频监控管理平台LntonCVS监控视频汇聚融合云平台主要功能应用场景介绍

随着网络技术的不断发展和万物互联时代的到来&#xff0c;视频融合在一些系统集成项目及综合管理应用中变得日益重要。本文以LntonCVS视频融合云平台为案例&#xff0c;探讨视频融合的对象及其应用场景。 1. 视频监控设备 视频监控摄像设备是各种视频应用项目的基础部分。在视…

CSS单行、同行文本左右对齐

再项目需求中&#xff0c;UI小姐姐常常要考虑项目的排版样式更简洁高级&#xff0c;常常会在项目设置内容或者字体两端对齐的效果&#xff0c;比如&#xff0c;在做表单时我们经常遇到让上下两个字段对齐的情况&#xff0c;比如姓名&#xff0c; 手机号码&#xff0c; 出生地等…

VUE3+Vite+vant4从零开始构建前端项目

VUE3Vitevant4从零开始构建前端项目 1. 环境准备Node.js 安装 2. Vite 构建项目3. 集成Vant41. 安装Vant 组件2. 引入组件3. 使用vant按钮组件 1. 环境准备 Node.js 安装 Node.js官网地址&#xff1a;https://nodejs.p2hp.com/ 下载最新的版本&#xff0c;下载文件为msi结尾的…

[力扣]——70.爬楼梯

题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 本题较为简单&#xff0c;主要用到递归思想 int fun(int n,int memo[]) {if(memo[n]!-1) //如果备忘录中已经有记录了…

区块链的运行原理与演示

目录 前言 具体演示 1、在浏览器中输入区块链演示网址&#xff1a; 2、创建新区块 3、篡改区块信息使其无效 4、新增P2P 网络节点。 5、节点连接。 6、区块信息同步 总结 前言 区块链系统是由一系列分布在全球各地的分布式节点组成的。这些节点互不隶属&#xff0c;通过…

Sonatype Nexus Repository 3 路径遍历漏洞复现(CVE-2024-4956)

0x01 产品简介 Sonatype Nexus Repository 是美国Sonatype公司的一款存储库管理器,用于存储和分发软件组件、构建工件和 Docker 容器。它支持多种包格式,与 CI/CD 工具集成,并提供安全性和合规性功能。 0x02 漏洞概述 Sonatype Nexus Repository 3 存在路径遍历漏洞(CVE-…

数据结构(二)单链表

一、链表 &#xff08;一&#xff09;概念 逻辑结构&#xff1a;线性 存储结构&#xff1a;链式存储&#xff0c;在内存中不连续 分为有头链表和无头链表 同时又细分为单向、循环、双向链表 &#xff08;二&#xff09;有头单向链表示意图 以下数据及地址只是为了方便理解…

【Linux】文件系统和软硬链接

目录 一、认识文件系统 二、认识磁盘 三、磁盘文件系统 3.1 磁盘存储的抽象逻辑结构 3.2 磁盘文件系统图 3.3 创建和删除文件 3.4 如何理解目录&#xff1f; 3.5 如何查找一个文件 3.6 查找文件的一般流程 3.7 如何确定文件所在的分区 3.8 总结 四、软硬链接 4.1 …

30、QUiLoader 在程序运行时读取UI 文件中的信息

QUiLoader 类可让独立应用程序在运行时使用UI 文件中存储的信息&#xff0c;进而可以分离UI设计工作。 一、使用Qt 设计师-Qt Designer创建ui文件 打开Qt Designer&#xff0c;选择“创建” 往中央区域拖住几个控件&#xff0c;进行布局&#xff0c;更改三个控件的objectName…

参考文献交叉引用两个文献,逗号隔开

1.引用两个参考文献&#xff0c;定位到word正文中需要引用的位置&#xff0c;然后插入-交叉引用&#xff0c;引好文献 2.选中两个参考文献&#xff0c;切换域代码&#xff0c;然后进行修改&#xff1a; 改为 上面的两张图片中的点是空格的含义&#xff0c;word中按ctrlshift8就…

Qt | QGridLayout 类(网格布局)

01、上节回顾 Qt | QBoxLayout 及其子类(盒式布局)02、QGridLayout 简介 1、网格布局原理(见下图): 基本原理是把窗口划分为若干个单元格,每个子部件被放置于一个或多个单元格之中,各 单元格的大小可由拉伸因子和一行或列中单元格的数量来确定,若子部件的大小(由 sizeH…

css - sass or scss ?

总的来说&#xff0c;Sass 和 SCSS 提供的功能是一样的&#xff0c;选择哪种语法主要取决于你的个人或团队的偏好。