聊一聊 js中严格模式 关于静默失败的问题 您所在的位置:网站首页 静默的解释是什么意思 聊一聊 js中严格模式 关于静默失败的问题

聊一聊 js中严格模式 关于静默失败的问题

2024-07-11 08:00| 来源: 网络整理| 查看: 265

相信童鞋们面试的时候,如果问道 es5中的严格模式中 和普通的模式有什么区别吗?

建议 说出 静默失败 将会报错 这个也是严格模式和 普通模式的区别 而且还是很重要的区别

那么静默失败 究竟是什么东东呢 ?

答案: 我们写的代码没执行可也没报错 这个就是静默失败的 通俗解释

可能看完上面说的也不明白 什么叫做 没执行 没报错 还有这种情况吗

且看我举一个例子就行了

Object.freeze() 冻结对象 禁止对对象进行操作! 具体用法 : 送你们个飞机票 mdn官方解释

var obj={name:"zhangsan"}; Object.freeze(obj); obj.name="lisi"; console.log(obj.name);// 输出 zhangsan

我们把obj给 “冻结了” 然后 想把obj.name 改成lisi 但是最后却没改成 也没报错 这个 可不是我们想要的

这个在公司开发项目的时候 如果是多人开发的 一个人在前面给冻结,后面一个人想要操作对象 那么发现失败了之后 一般是很难找到问题得哈 所以公司开发都是会开启严格模式的 在这里插入图片描述 我们把严格模式打开再试试看

"use strict"; var obj={name:"zhangsan"}; Object.freeze(obj); obj.name="lisi"; console.log(obj.name);// 输出 zhangsan

在这里插入图片描述 Cannot assign to read only property ‘name’ of object ‘#’ at :4:9 意料之中的报错 禁止给 只读属性的name 重新赋值

你以为这样就完了了 其实不然的 我为什么会拿 Object.freeze 来举例子 也是有深意的

我们再把上面的例子 改一改

"use strict"; var obj={name:"zhangsan",person:{sex:"女"}}; Object.freeze(obj); obj.person.sex="男"; console.log(obj.person.sex);// 输出 男

竟然修改成功了 我们不是把它给冻结了么 哈哈

提示: Object.freeze() 是 浅冻结 只能冻结一层 深层的对象属性 我们是无法冻结的 照样可以修改,操作 在这里插入图片描述 那我们就没有办法了 其实编程语言就怕的是你 没有这个想法 没想法才是可怕的 那么我们就尝试着去解决下哈

这里 我也给出答案了哦 用递归地方式进行冻结 我提供一个乞丐版的

"use strict" var obj={name:"zhangsan",person:{sex:"女"}}; function deepFreeze(obj){ for(var key in obj){ if(typeof obj[key] == "object"){ deepFreeze(obj[key]); } } Object.freeze(obj[key]); } deepFreeze(obj); obj.person.sex="男"; console.log(obj.person.sex);

这可能是我第一次看见报错还是这么开心的哦 哈哈 在这里插入图片描述 关注冲哥 持续更新前端知识 不想当架构师的程序员不是好程序员



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有