JavaScript(JS进阶)

目录

00闭包

01函数进阶

02解构赋值

03通过forEach方法遍历数组

04深入对象

05内置构造函数

06原型


00闭包
html 复制代码
<!-- 闭包 -->

<html>

<body>
    <script>
        // 定义:闭包=内层函数(匿名函数)+外层函数的变量(s)
        // 作用:封闭数据,提供操作,外部可以访问函数内部变量
        function fun() {
            let s = 'Hello World'
            return function () {
                document.write(s)
            }
        }
        let f = fun()
        f()
    </script>
</body>

</html>
01函数进阶

1>函数参数

1.动态参数

arguments是函数内置的伪数组,包含传入的所有实参(函数声明时形参列表为空)

2.剩余参数

将不定数量的剩余参数表示为数组

形参列表形如(形参列表 , ...剩余参数数组名)

3.展开运算符(...)

html 复制代码
<!-- 展开运算符 -->

<html>

<body>
    <script>
        let arr = [1, 2, 3]
        console.log(...arr) // 1 2 3
        // 不改变原数组
    </script>
</body>

</html>

2>箭头函数

1.基本语法:

function(){} 等效于 () => {}

只有一个形参,小括号可省略

只有一行函数体,大括号可省略

2.箭头函数参数:

无动态参数,有剩余参数

02解构赋值
html 复制代码
<!-- 数组解构 -->

<html>

<body>
    <script>
        // 定义:将数组各值快速批量赋值给一系列变量
        let arr = [1, 2, 3]
        let [a, b, c] = arr
        console.log(a) // 1
        console.log(b) // 2
        console.log(c) // 3
    </script>
</body>

</html>
html 复制代码
<!-- 对象解构 -->

<html>

<body>
    <script>
        // 定义:将对象属性和方法快速批量赋值给一系列变量
        // 注意:新变量名和对应的属性名要相同
        let obj = { myname: 'Tian', age: 20 }
        let { myname, age } = obj
        console.log(myname) // Tian
        console.log(age) // 20
    </script>
</body>

</html>
03通过forEach方法遍历数组
html 复制代码
<!-- 通过forEach方法遍历数组 -->

<html>

<body>
    <script>
        let arr = ['one', 'two', 'three']
        arr.forEach(function (item, index) {
            console.log(item) // 数组元素
            console.log(index) //索引号
        })
        // one
        // 0
        // two
        // 1
        // three
        // 2
    </script>
</body>

</html>
04深入对象

1>构造函数

html 复制代码
<!-- 构造函数 -->

<html>

<body>
    <script>
        function Std(uname, age) { // 约定:函数名首字母大写
            this.uname = uname
            this.age = age
        }
        console.log(new Std('罗哲秀', 20))
        console.log(new Std('雷淇', 19))
    </script>
</body>

</html>

2>实例成员&静态成员

实例成员:实例对象的属性和方法(实例属性和实例方法)

静态成员:构造函数的属性和方法(静态属性和静态方法)

05内置构造函数

1>Object常用静态方法

Object.keys(obj)【返回对象obj的键(数组)】

Object.values(obj)【返回对象obj的值(数组)】

Object.assign(obj1,obj2)【obj2拷贝给obj1,追加不覆盖】

2>Array常用方法

html 复制代码
<!-- reduce方法 -->

<html>

<body>
    <script>
        let arr = [1, 2, 3]
        // reduce的参数为回调函数和初始值
        let ans1 = arr.reduce((pre, cur) => pre + cur) // 箭头函数为回调函数
        console.log(ans1) // 6
        let ans2 = arr.reduce((pre, cur) => pre + cur, 60) // 60为初始值
        console.log(ans2) // 66
    </script>
</body>

</html>
html 复制代码
<!-- find方法 -->

<html>

<body>
    <script>
        // 以对象数组为例--------------------
        let arr1 = [{ uname: '罗哲秀', age: 20 }, { uname: '雷淇', age: 19 }]
        console.log(arr1.find(array => array.age === 19))

        // 以字符串数组为例--------------------
        let arr2 = ['罗哲秀', '雷淇']
        console.log(arr2.find(uname => uname === '雷淇'))
        
        // 箭头函数 uname => uname === '雷淇'
        // 等价于
        // function myfind(uname) {return uname === '雷淇'}
    </script>
</body>

</html>
html 复制代码
<!-- every和some方法 -->

<html>

<body>
    <script>
        let arr = [{ uname: '罗哲秀', age: 20 }, { uname: '雷淇', age: 19 }]

        // every方法--------------------
        // 全部的元素符合条件
        let flag = arr.every(array => array.age >= 18)
        console.log(flag) // true

        // some方法--------------------
        // 存在符合条件的元素
        flag = arr.some(array => array.age >= 20)
        console.log(flag) // true
    </script>
</body>

</html>

3>String常用属性和方法

实例属性:length

实例方法:

1.split(分隔符)【将字符串分割为数组】

2.substring(indexStart[, indexEnd])【截取字符串,不包括indexEnd】

3.startsWith(Str[, pos]【检测字符串是否以Str开头,从pos开始检测,不写默认为0】

4.includes(Str[, pos])【检测字符串是否含有Str,从pos开始检测,不写默认为0】

06原型
html 复制代码
<!-- 利用原型对象实现方法共享 -->

<html>

<body>
    <script>
        // 构造函数
        function Stu(uname, age) {
            this.uname = uname
            this.age = age
        }

        // 通过原型prototype,向构造函数添加方法共享
        Stu.prototype.say = function () {
            console.log(`我叫${this.uname},今年${this.age}岁`);
        };

        //实例化,并调用共享函数 
        let LQ = new Stu('雷淇', 19)
        let QQ = new Stu('清浅', 20)
        LQ.say()
        QQ.say()
    </script>
</body>

</html>
html 复制代码
<!-- 原型继承 -->

<html>

<body>
    <script>
        // 父亲"人"
        function people() {
            this.hair_color = '黑'
            this.leg_number = '两'
            this.say = function () {
                console.log(`我有${this.hair_color}色的头发和${this.leg_number}条腿`)
            }
        }

        // 孩子"LQ"
        function LQ() {
            this.dance = () => console.log('跳舞')
        }
        LQ.prototype = new people
        let lq = new LQ

        // 孩子"QQ"
        function QQ() {
            this.sing = () => console.log('唱歌')
        }
        QQ.prototype = new people
        let qq = new QQ

        // 调用共享方法和私有方法,验证原型继承
        lq.say() // 我有黑色的头发和两条腿
        lq.dance() // 跳舞
        qq.say() // 我有黑色的头发和两条腿
        qq.sing() // 唱歌
    </script>
</body>

</html>
相关推荐
Zevalin爱灰灰3 分钟前
MATLAB GUI界面设计 第二章——APP Designer操作正式入门
开发语言·ui·matlab
程序员弘羽10 分钟前
C++ 第二阶段:类与对象 - 第三节:成员函数与访问权限
开发语言·c++
curdcv_po15 分钟前
就业形势很差吗?老板让我弄3d,从0学blender建模
前端
夕水23 分钟前
为了方便学习icss项目上的css技巧,我用next.js写了一个网站
前端·css
我命由我1234533 分钟前
C++ - 标准库之 <string> npos(npos 概述、npos 的作用)
服务器·c语言·开发语言·c++·后端·visualstudio·visual studio
君鼎35 分钟前
C++项目经验与解决问题能力需知
开发语言·c++
天蓝色的鱼鱼37 分钟前
Vue 3.5+ 惰性激活实战指南:解锁SSR极致性能的7大策略
前端·vue.js
青山Coding43 分钟前
Cesium基础(五)实体创建与拖拽
前端·cesium
小喷友43 分钟前
Flutter 从入门到精通(水)
前端·flutter·app
Lucky27044 分钟前
使用Vue3开发商品管理器(一)
前端