前端基础1-6 :es6

点击跳转,详细查看es6

const常量

javascript 复制代码
const LIMIT = 10;
const OBJ_MAP = {
    a: 'A',
    A: 'a'
}

1. 不允许重复声明赋值

js 复制代码
    var arg1 = 'a'
    arg1 = 'aa'

    // 常量 - ES5
    Object.defineProperty(window, 'arg2', {
        value: 'aaa',
        writable: false
    })

    // ES6
    const arg2 = 'aaa'

2. 块级作用域

js 复制代码
    if (true) {
        console.log(arg1)
        var arg1 = 'aa'
    }
    console.log(arg1)

    if (true) {
        const arg1 = 'aa'
    }

    // dead zone => 先声明赋值 再使用

3. const 和 let

js 复制代码
    // 会被改变的对象,到底用const还是let?
    const obj = {
        teacher: 'aa',
        date: '20240530'
    }

    obj.teacher = ''
    const obj2 = obj

    // 1. 栈 + 2. 堆

    // 能用const的地方,都用const

    // 面试:如何对一个对象进行常量化?
    // 破局 - Object.freeze()
    Object.freeze(obj)

    // 追问:只能冻结根层?
    const obj = {
        teacher: 'aa',
        date: '20240530',
        course: {
            course1: 'basic',
            course2: 'trial'
        }
    }

    function deepFreeze(obj) {
        Object.freeze(obj)
        (Object.keys(obj) || []).forEach(key => {
            if (typeof obj[key] === 'object') {
                deepFreeze(obj[key])
            }
        })
    }

deconstruction 解构 - 解开对象结构

js 复制代码
    const obj = {
        teacher: 'yy',
        course: 'es'
    }

    const {
        teacher,
        course
    } = obj;

    const arr = [1, 2, 3, 4, 5]
    const [a, b, c, d, e] = arr;

    let a = 1;
    let b = 2;

    [b, a] = [a, b]

arrow_function 箭头函数

javascript 复制代码
    // 传统函数
    function test(a, b) {
        return a + b;
    }

    const test = function(a, b) {
        return a + b;
    }

    const test = (a, b) => {
        return a + b;
    }
    const test = (a, b) => a + b;
    const test = x => {}

上下文

javascript 复制代码
    const obj2 = {
        teacher: 'aa',
        course: 'es',
        table: ['black', 'red'],
        getTeacher: function() {
            return this.teacher;
        },
        getTable: () => {
            // 不存在独立上下文
        }
    }

class 助力js更加具有面向对象的形式 - 类

js 复制代码
    // 传统类型的对象 - function
    function Course(teacher, course) {
        this.teacher = teacher
        this.course = course
    }

    Course.prototype.getCourse = function() {
        return `teacher is ${this.teacher}`;
    }

    const course = new Course('aa', 'ES')
    const course1 = new Course('aa1', 'ES2')

    // ES6
    class Course {
        constructor(teacher, course) {
            this.teacher = teacher
            this.course = course
        }
        getTeacher() {
            return ''
        }
        static getCourse() {}
    }

    const course = new Course('aa', 'ES')
    course.getTeacher()
    Course.getCourse()

追问

class 的类型是什么?

Function => Object => null

class的prototype

js 复制代码
    Course.prototype

class 函数对象的属性

js 复制代码
    course.hasOwnProperty('teacher')
js 复制代码
// 1. 如何建立只读变量
    class Course {
        constructor(teacher, course) {
            this._teacher = teacher
            let _course = 'es'

            this.getCourse = () => {
                return _course
            }
        }
        // get teacher() {
        //     return this._teacher
        // }
    }

    class Course {
        #course = 'es6'
        set course(val) {
            if (val) {
                this.#course = val
            }
        }
    }

    // 3. 封装核心 - 适配器模式
    // {
    //     name: {
    //         value: 'lodash',
    //         tag: 124,
    //         name: 'es6'
    //     }
    // }
    class utils {
        constructor(core) {
            this._main = core
            this._name = 'myName'
        }
        get name() {
            return {
                ...this._main.name,
                name: `${this._name}`
            }
        }
        set name(val) {
            this._name = val
        }
    }
相关推荐
m0_748257184 分钟前
Spring Boot FileUpLoad and Interceptor(文件上传和拦截器,Web入门知识)
前端·spring boot·后端
桃园码工22 分钟前
15_HTML5 表单属性 --[HTML5 API 学习之旅]
前端·html5·表单属性
百万蹄蹄向前冲1 小时前
2024不一样的VUE3期末考查
前端·javascript·程序员
轻口味1 小时前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami1 小时前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
吃杠碰小鸡2 小时前
lodash常用函数
前端·javascript
emoji1111112 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼2 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250032 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O2 小时前
vue3 如何使用 mounted
前端·javascript·vue.js