• ES5 语法详解


    ES5语法详解

    全称 : ECMAScript

    2019年发布

    严格模式

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <script>
                // 启用严格模式
                'use strict';
                
                // 变量必须声明后使用
                const name = 'flower'
                console.log(name)
                
                // eval 函数:解析字符串代码 启用严格模式会使eval函数存在自己的作用域,不启用会污染全局的作用域
                eval('alert("flower")')
            </script>
        </body>
    </html>

    JSON对象

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
        </body>
        <script>
            // 声明JSON 对象
            const obj = {
                username: 'flower'
            }
            
            // 将JSON对象转换为JSON字符串
            const jsonString = JSON.stringify(obj)
            console.log(jsonString)
            
            // 将JSON字符串转换为JSON对象
            const jsonObj = JSON.parse(jsonString)
            console.log(jsonObj)
        </script>
    </html>

    Object扩展

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
        </body>
        <script>
            /**
             * Object.create(prototype, [descriptors])
             *     作用: 以指定对象为原型,创建新的对象
             *     为新的对象指定新的属性,并对属性进行描述
             *         - value : 指定值
             *         - writable : 标识当前属性值是否是可以修改的,默认为false
             *         - configurable : 标识当前属性是否是可以删除的,默认为false
             *         - enumerable : 标识当前属性是否能用for in 枚举,默认为false
             */
    
            // 定义指定对象原型
            const srcObj = {
                username: 'flower'
            }
            // 定义新对象
            let desc = {}
            desc = Object.create(srcObj, {
                // 新属性
                sex: {
                    value: '', //
                    writable: true, // 可以被修改
                    configurable: true, // 可以被delete删除
                    enumerable: true // 可以被 for in 枚举
                }
            })
    
            console.log(desc)
            // 修改
            desc.sex = ''
            console.log(desc.sex)
    
            // for in 枚举
            for (let key in desc) {
                console.log(key)
            }
    
            // 删除
            delete desc.sex
            console.log(desc)
    
            /**
             * Object.defineProperties(object, descriptors)
             *     作用: 为指定对象定义扩展多个属性
             *         get : 用来获取当前属性值的回调函数
             *         set : 修改当前属性值触发的回调函数,并且实参即为修改后的值
             *     存取器属性: 
             *         setter : 用于存值
             *         getter : 用于取值
             */
    
            const obj2 = {
                firstName: 'Mr',
                lastName: 'dance'
            }
    
            // 为指定对象定义扩展属性
            Object.defineProperties(obj2, {
                fullName: {
                    get() {
                        return this.firstName + '.' + this.lastName
                    },
                    set(data) {
                        console.log(data)
                        const fullName = data.split('.')
                        this.firstName = fullName[0]
                        this.lastName = fullName[1]
                    }
                }
            })
            console.log(obj2)
    
            // 修改扩展属性的值
            obj2.fullName = 'Mis.flower'
            console.log(obj2)
    
            /**
             * 对象本身的两个方法
             *     get propertyName(){} 用来得到当前属性值的回调函数
             *     set propertyName(){} 用来监视当前属性值变化的回调函数
             */
            const obj3 = {
                firstName: 'Mr',
                lastName: 'dance',
                get fullName() {
                    return this.firstName + '.' + this.lastName
                },
                set fullName(data) {
                    const fullName = data.split('.')
                    this.firstName = fullName[0]
                    this.lastName = fullName[1]
                }
            }
            
            console.log(obj3)
            
            // 修改扩展属性 set 方法是响应式的
            obj3.fullName = 'Mis.flower'
            console.log(obj3)
        </script>
    </html>

    Array扩展

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
        </body>
        <script>
            /**
             * 1. Array.prototype.indexOf(value) : 得到值在数据中的第一个下标
             * 2. Array.prototype.lastIndexOf(value) : 得到值在数据中的最后一个下标
             * 3. Array.prototype.forEach(funcation(item,index){}) : 遍历数组
             * 4. Array.prototype.map(funcation(item,index){}) : 遍历数组返回一个新的数组,返回加工之后的值
             * 5. Array.prototype.filter(funcation(item,index){}) : 遍历过滤出一个新的子数组,返回条件为true的值
             */
    
            const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 6]
    
            // 输出第一个 6 的下标
            const firstIndex = arr.indexOf(6)
            console.log(firstIndex)
    
            // 输出最后一个 6 的下标
            const lastIndex = arr.lastIndexOf(6)
            console.log(lastIndex)
    
            // 输出所有元素的值和下标
            arr.forEach(function(item, index) {
                console.log('index: ' + index + ',item: ' + item)
            })
            
            // 根据 arr 产生一个新数组,要求每个元素都比原来大10
            const bigArr = arr.map(function(item, index) {
                return item + 10
            })
            console.log(bigArr)
            
            // 根据 arr 产生一个新数组,返回的每个元素都要大于4
            const filterArr = arr.filter(function(item, index) {
                if(item > 4){
                    return true
                }
                return false
            })
            console.log(filterArr)
            
        </script>
    </html>

    Function扩展

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
        </body>
        <script>
            /**
             * 1. Function.prototype.bind(obj)
             *     作用: 将函数内的this绑定为obj,并将函数返回
             * 2. 面试题: 区别bind()与call()和apply()?
             *     都能指向函数中的this
             * call() / apply() 是立即调用函数
             * bind() 是将函数返回
             */
    
            // 定义对象
            const obj = {
                username: 'Mr.dance'
            }
    
            // 定义函数
            function foo(data) {
                console.log(this, data)
            }
    
            // 直接执行 this默认指向window
            foo(33)
    
            // 调用call 指定this 对象为 obj,传入参数33
            foo.call(obj, 33)
    
            // 调用apply 指定this 对象为 obj,传入参数33
            foo.apply(obj, [33])
    
            /**
             * call 和 apply 传入参数的方式不同
             */
    
            // bind : 只绑定this 为 obj 不执行函数,需要手动调用
            const bindFunction = foo.bind(obj)
            bindFunction(33)
    
            // 也可以在绑定this的同时,传入参数
            const bindFunctionParam = foo.bind(obj, 33)
            bindFunctionParam()
        </script>
    </html>

    作者:彼岸舞

    时间:2021816

    内容关于:前端知识库

    本文属于作者原创,未经允许,禁止转发

  • 相关阅读:
    设计模式(观察者模式,MVC模式)
    设计模式(单例,委托模式)
    iOS API
    iOS介绍
    多种服饰颜色搭配
    国内npm镜像使用
    iOS开发拓展篇—应用之间的跳转和数据传
    iOS开发网络篇—使用ASI框架进行文件下载
    iOS开发网络篇—数据缓存(使用NSURLCache)
    iOS开发网络篇—发送json数据给服务器以及多值参数
  • 原文地址:https://www.cnblogs.com/flower-dance/p/15150192.html
Copyright © 2020-2023  润新知