当前位置: 首页 > news >正文

免费域名查询网站微信文档

免费域名查询网站,微信文档,网站设计方案定制,佛山建站软件探究 delete 的一些细节,起源于刚刚做过的一道笔试,原题如下: a 1; const b 2; console.log(delete a); console.log(delete b); // 输出结果是? // 答:true false我可从来没用过 delete 的返回值,但凡…

探究 delete 的一些细节,起源于刚刚做过的一道笔试,原题如下:

a = 1;
const b = 2;
console.log(delete a);
console.log(delete b); 
// 输出结果是?
// 答:true false

我可从来没用过 delete 的返回值,但凡犹豫一秒都是对自己的不自信,所以立马选择 undefined,笔试结束后回想起来,怎么会出这么奇怪的题,于是自己实际试了一下,真是不试不知道,一试吓一跳啊!!!

2023-09-21-21-32-59

delete 关键字是其实有返回值的!并且 delete 还是有一些细节/规则的

  • 如果删除的属性不存在于对象本身,delete 不起任何作用,但仍会返回 true !

  • delete 只会删除对象自身属性,不会删除对象原型链上的属性!

    function A() {}
    A.prototype.b = 1;
    const a = new A();
    console.log(delete a.b, a.b); // true 1 (删除对象自身不存在属性时返回true,并且无法删除原型链上的属性)
    
  • 不可配置的属性不能被删除,返回 false !

  • 无法直接删除有声明的变量(包括函数参数),返回 false !

    delete variable 在严格模式下抛出 SyntaxError 错误

    • 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除,因为即使它们可能附加到全局对象上,它们也是不可配置的。
    • 任何使用 let 或 const 声明的属性不能够从它被声明的作用域中删除,因为它们没有附加到任何对象上。

现在看来同程旅行还是保守了,要是现在的我,我估计会出下面的题:

a = 1; // 绑定到了 globalThis 对象中
var b = 2; // 绑定到了 globalThis 对象中
const obj = {};
const d = 3;
let e = 4;
console.log(Object.getOwnPropertyDescriptor(globalThis, 'a').configurable); // true
console.log(Object.getOwnPropertyDescriptor(globalThis, 'b').configurable); // false(通过var定义的全局变量虽然会被绑定到globalThis中,但它是不可配置的!)console.log(delete a); // true (a不是一个有声明的变量,这时会去globalThis上找,把globalThis.a给删了)
console.log(delete b, b); // false 2 (下面单独说)
console.log(delete obj, obj); // false {} (对象 obj 没有被删,因为 obj 是 const 声明)
console.log(delete obj.c, obj.c); // true undefined (删除一个原本就不存在的属性返回 true )
console.log(delete d, d); // false 3 (变量 d 没有被删,因为它是 const 声明)
console.log(delete e, e); // false 4 (变量 e 没有被删,因为它是 let 声明)
console.log(delete f); // true(删除一个原本就不存在的属性返回 true )

globalThis 就是全局对象,浏览器下指向 window、node下指向 global。

console.log(delete b, b);没有把 b 删除,我们有两种解释:

  1. 跟 const、let 声明一样,var 声明的变量无法直接被删除。
  2. b 没被删除是因为,当 delete 去 globalThis 上找它时,发现它是不可配置的,所以无法删除。

为了简单理解和减少歧义,我更认同 1 的解释(你可以想一下 2 的解释会引发哪些歧义),如果您有更好的理解,欢迎评论区留言!

var 声明的全局变量是不可配置的这个细节在“谈谈 var、const、let 的区别”的这个面试题中可以主动展开说一下🧐

http://www.yayakq.cn/news/405475/

相关文章:

  • 网站建设 入门知识松江网站设计
  • 济南君哲网站建设公司外贸建站模版
  • 做婚恋交友类网站抖音广告推广怎么做
  • 湘潭九华网站wordpress-黄聪
  • 最好的国际贸易网站wordpress音乐页面面板
  • 怎么把网站提交wordpress title 分类
  • 江苏路街道网站建设免费的网页设计成品资源
  • 做平台还要做网站吗thinphp 做外贸网站
  • 做网站建设的公司有哪些方面wordpress调用视频播放器
  • 重庆自助建站网站宁波优化网站排名公司推荐
  • 南宁建设职业技术学院招聘信息网站狭义的网络营销
  • 网站需要什么服务器wordpress 网络公司主题
  • 表白网页在线生成网站兰州网站建设推荐q479185700上快
  • 广州注册公司在哪个网站小程序和网站开发难度
  • 湖南城乡建设厅网站网站架构建设方案
  • iis网站筛选器被挂马网站建设是属于虚拟产品吗
  • 湖南长沙天气营销软件知名乐云seo品牌
  • wordpress 跨站领导不愿意做招聘网站怎么办
  • 内部网站如何做济南三维动画制作公司
  • 织梦网站添加广告位绵阳住房和城乡建设局网站
  • 网站标识加盟网站制作推广
  • 视频网站开发教程做网站话挣钱吗
  • 陕西省网站备案互联网营销师
  • 河南郑州网站建设公司甘肃百度推广电话
  • 欢乐海岸网站建设免费弄空间的网站
  • 深圳网站维护服务的公司wordpress建什么网站好
  • 油金地 做网站河北高端网站设计公司
  • 全总基层组织建设网站网上智慧团建登录入口
  • wordpress农业站模板商业计划书ppt免费模板下载
  • 做网站什么公司好建设悦生活网站