用var声明xiaoming,为什么xiaoming的值没有被改变?IE6之前应该没有const吧?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
//补充代码
Object.defineProperty(Object, 'freezePolyfill', {
value: function(obj) {
var i;
for (i in obj) {
if (obj.hasOwnProperty(i)) {
if(typeof obj[i]=="object"){
Object.freezePolyfill(obj[i]);
}
Object.defineProperty(obj, i, {
writable: false
});
}
}
Object.seal(obj);
}
});
var xiaoming = {
age: 14,
name: '小明',
obj: {
a: 1
}
};
Object.freezePolyfill(xiaoming);
xiaomin={};
console.log(xiaoming);
</script>
</body>
</html>
正在回答
同学你好,是的,在es6之前无法得到不变的常量。
老师现在明白同学的问题了,同学书写的代码,使用freezePolyfill方法冻结xiaoming这个对象,只是无法改变这个对象下的属性,但是这个对象本身是可以被重新赋值的,所以执行完xiaoming={}这句代码后,相当于重新给xiaoming赋值了,所以控制台打印的是空对象。
如下:使用var和let 声明xiaoming这个变量,之后都可以重新赋值。使用const声明表示常量,之后无法更改它的值,所以重新给xiaoming赋值会出现报错。示例:
var声明
let声明
const声明
同学可以测试理解下,祝学习愉快~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星