const定义的对象属性是否可以改变

    在作业盒子面试的时候问到了一个问题,const定义的对象属性是否可以改变。当时没有考虑就回答了不可以,面试官微笑着回答说错了。回来后查看了一下const的定义,明白了其中的原理。

    const是用来定义常量的,而且定义的时候必须初始化,且定义后不可以修改。对于基本类型的数据来说,自然很好理解了,例如 const PI = 3.14。如果定义的时候不初始化值的话就会报错,错误内容就是没有初始化。具体的错误信息如下图:

如果我们修改const定义的常量也是会出现错误的,提示的错误如下图:


可见,const定义的基本数据类型的变量确实不能修改,那引用数据类型呢?

先看一个演示:


P对象的name属性确实被修改了,怎么理解这个现象呢?

因为对象是引用类型的,P中保存的仅是对象的指针,这就意味着,const仅保证指针不发生改变,修改对象的属性不会改变对象的指针,所以是被允许的。也就是说const定义的引用类型只要指针不发生改变,其他的不论如何改变都是允许的。

我们试着修改一下指针,让P指向一个新对象,结果如下图:


即使对象的内容没发生改变,指针改变也是不允许的。


  • 36
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3中,定义计算属性和监听属性的方式有所变化。下面分别介绍: 1. 定义计算属性 在Vue3中,定义计算属性需要使用`computed`函数,该函数可以接收一个对象作为参数,对象中的属性名即为计算属性的名称,属性值为计算属性的getter和setter函数。 例如,定义一个计算属性`fullName`,它依赖于`firstName`和`lastName`两个属性: ``` import { computed, reactive } from 'vue' const user = reactive({ firstName: 'John', lastName: 'Doe', }) const fullName = computed(() => { return `${user.firstName} ${user.lastName}` }) console.log(fullName.value) // 'John Doe' ``` 在上面的例子中,我们通过`computed`函数定义了一个名为`fullName`的计算属性,它的getter函数返回了`user.firstName`和`user.lastName`的拼接字符串。 需要注意的是,计算属性的getter函数必须返回一个值,否则会报错。 2. 监听属性 在Vue3中,监听属性需要使用`watch`函数,该函数需要接收两个参数,第一个参数是要监听的属性的值,第二个参数是一个回调函数,当属性的值发生变化时会触发该回调函数。 例如,定义一个监听属性`age`,当它的值发生变化时输出变化后的值: ``` import { watch, reactive } from 'vue' const user = reactive({ name: 'John', age: 18, }) watch( () => user.age, (newVal, oldVal) => { console.log(`age changed from ${oldVal} to ${newVal}`) } ) user.age = 20 // 'age changed from 18 to 20' ``` 在上面的例子中,我们使用`watch`函数监听了`user.age`属性的变化,当它的值发生改变时会执行回调函数。在回调函数中,我们输出了变化前后的值。 需要注意的是,`watch`函数的第一个参数必须是一个函数,该函数返回的值就是要监听的属性的值。在上面的例子中,我们使用了箭头函数来返回`user.age`的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值