Javascript常见错误

Javascript常见错误

Object的赋值错误
错误示例
let alerts_init = {'a':1, 'b':2}
let alerts = alerts_init
alerts = {'c':3}
console.log(alerts_init)

你会惊喜的发现alerts_init的值被改变了,变成和alerts一样。
作为两个对象,不能这样用。

正确示例
let alerts = Object.assign({}, alerts_init)

这样改变alerts,alerts_init还是保持原样。

Object的赋值错误2(对象内包含对象)
错误示例
template.vars = {
    'warn': {
        'type': 'int',
        'value': 80}
}
task.vars = template.vars
//或
task.vars = Object.assign({}, template.vars)

如果直接赋值:task.vars = template.vars
就会出现问题,因为task.vars的值一改变,template.vars的值也跟着改变。
原因是他们都是同一个对象。

采用Object.assign()是否可以解决问题?
也不行。
因为Object.assign是浅复制,warn的值是一个对象,仍然会将该对象传递过去,导致template.vars的值也会跟着变。

正确示例
task.vars = JSON.parse(JSON.stringify(template.vars))

这样改变task,template还是保持原样。

Array为空的判断

错误示例
let alerts = []
if(alerts == [])

alerts的ID和[]的ID是不一样的,不能这样比较。(如果是python,这是对的)

正确示例
let alerts = []
if(alerts.length == 0)

console.log的值自相矛盾

let alert_inform = {
    email: ['xxx']
    wechat: ['yyy']
}
console.log('alert inform %o', alert_inform)
console.log('email %o', alert_inform.email)

当在chrome的控制台展开alert_inform查看时,里面的email可能和下面的console.log的email值不一样,到底怎么回事?
可以参考这个:https://stackoverflow.com/questions/11284663/console-log-shows-the-changed-value-of-a-variable-before-the-value-actually-ch

简单的说,就是chrome没有修复一个bug。这个bug就是在用console.log打印一个对象时,这个对象里面的值是可能被后面的修改所改变(无语。。。)。要解决,就要打印对象时,用深拷贝。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值