javascript-意外的“删除”返回值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-意外的“删除”返回值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1298字,纯文字阅读大概需要2分钟。
内容图文
![javascript-意外的“删除”返回值](/upload/InfoBanner/zyjiaocheng/682/8b1bbfe7640248ccba5930241f9e3870.jpg)
我有以下代码片段,其中最后一个“删除”用法返回了意外的值.
function Shape() {
this.a = 10;
}
Shape.prototype.a = 20;
var s = new Shape();
console.log(s.a); // 10
delete s.a; //true
console.log(s.a) // 20
delete s.a; //true
console.log(s.a); // 20
即使最终的“删除s.a”返回true,“ s.a”的值仍返回20.
如果我们无法通过对象的引用(在本例中为“ s”)通过引用删除原型上的对象,为什么delete关键字返回true?
其次,
删除Shape.prototype.a; //正确
给出true,并且该属性确实从Shape.prototype中删除.但是,有什么方法可以通过对象引用“ s”删除“ Shape.prototype.a”?
解决方法:
delete关键字的返回值并不指示delete操作实际上是否确实删除了字段.从MDN article about delete keyword开始:
Return value
Throws in strict mode if the property is an own non-configurable
property (returns false in non-strict). Returns true in all other
cases.
在您的情况下,s.a不是自己的财产,因此delete将始终返回true.是否在原型链中找到该属性都没有关系.例如:
delete {}.xyz; // also returns `true`.
您不应更改原型,因为它会破坏JavaScript引擎为您改善性能所做的所有优化.但是,如果确实需要,可以使用以下功能:
function deepDelete(o,key) {
while (o) {
delete o[key];
o = Object.getPrototypeOf(o);
}
}
例:
function S(){}
S.prototype.a = 8;
var s = new S();
s.a = 9;
console.log(s.a); // 9
delete s.a;
console.log(s.a); // 8
deepDelete(s, 'a');
console.log(s.a); // undefined
内容总结
以上是互联网集市为您收集整理的javascript-意外的“删除”返回值全部内容,希望文章能够帮你解决javascript-意外的“删除”返回值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。