JavaScriptEs6 笔记

声明const的值被修改解决方法与原因

如果不调用myFreeze(esObj)函数,extension中的元素将会被修改

const esObj = {
    name: "es6",
    page: 2,
    extension: [10, 20, 3, 40]
}
Object.freeze(esObj)
/*
    即使冻结后依然可以改变extension的值
    这是因为数组是存储在堆内存(heap)里
    而基本数据类型是存储在栈内存(stack)
    而且freeze只能冻结最外层
*/
myFreeze(esObj)
esObj.extension[0] = 12
console.log(esObj)
// 自定义方法使其全部冻结
function myFreeze(obj) {
    Object.freeze(obj)
    Object.keys(obj).forEach(key => {
        if (typeof obj[key] === 'object') {
            myFreeze(obj[key])
        }
    })
}

箭头函数this指向

这段代码输出会报错this调用链查找到外部没有找到address

const obj2 = {
    address: "广州",
    showAddress= () => {
        console.log(this.address)
    }
}
obj2.showAddress()

箭头函数无法使用arguments

const sum = (x, y) => {
    console.log(arguments)
    return x + y
}

不能使用箭头函数作为构造函数

// 不能使用箭头函数作为构造函数
const Course = (name,price)=>{
    this.name = name
    this.price = price
}

箭头函数不能使用prototype

// 箭头函数不能使用prototype
Course.prototype.study = () =>{
    console.log(`学习${this.name},价格是${this.price}`)
}

优雅的取值方式,结构得一致

const esObj = {
    name: "es6",
    page: 2,
    extension: [10, 20, 3, 40],
    teacher: {
    	name: 'jack'
    }
}
const {name,page} = esObj
// 取数组
const courseArr = ['e6', 'e7', 'e8']
const [a, b, c] = courseArr
console.log(a, b, c)

// 取内部对象
const { name, page, teacher: {
    name: name1 // 重名可以取别名
} } = esObj
console.log(name, page, name1)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值