聊一聊 js中严格模式 关于静默失败的问题 | 您所在的位置:网站首页 › 静默的解释是什么意思 › 聊一聊 js中严格模式 关于静默失败的问题 |
相信童鞋们面试的时候,如果问道 es5中的严格模式中 和普通的模式有什么区别吗? 建议 说出 静默失败 将会报错 这个也是严格模式和 普通模式的区别 而且还是很重要的区别 那么静默失败 究竟是什么东东呢 ? 答案: 我们写的代码没执行可也没报错 这个就是静默失败的 通俗解释 可能看完上面说的也不明白 什么叫做 没执行 没报错 还有这种情况吗 且看我举一个例子就行了 Object.freeze() 冻结对象 禁止对对象进行操作! 具体用法 : 送你们个飞机票 mdn官方解释 var obj={name:"zhangsan"}; Object.freeze(obj); obj.name="lisi"; console.log(obj.name);// 输出 zhangsan我们把obj给 “冻结了” 然后 想把obj.name 改成lisi 但是最后却没改成 也没报错 这个 可不是我们想要的 这个在公司开发项目的时候 如果是多人开发的 一个人在前面给冻结,后面一个人想要操作对象 那么发现失败了之后 一般是很难找到问题得哈 所以公司开发都是会开启严格模式的
你以为这样就完了了 其实不然的 我为什么会拿 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 实验室设备网 版权所有 |