最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript核心原理解析--delete 0

    正文概述 掘金(毛爷爷我男神不想说话)   2020-12-02   473

    今年干了人生中几件大事,结婚,老婆怀孕这也意味着我马上要当爸爸了,在这里恭喜自己^_^!!,但是随之而来的是压力,回想我这两年的工作,突然有了危机我和刚毕业的时候没有任何的进步,所以得益于公司的福利,有机会在极客时间上充充电,所以决定每天学点东西把自己的知识丰富起来,从今天起会不定期的更新JavaScript核心原理解析的心得,从基础补起(一直在计划,从来未实践),所以希望我可以坚持下去。

    知识点归纳

    首先先上结论:

    那么它真正需要的语法其实是

    delete obj.x
    

    "delete x" 只不过因为全局对象的成员可以用全局变量的形式来存取,所以当x 表示是全局变量的时候这个语法才有意义,表示删除的是全局对象上的x成员

    如果删除的是一个值会怎么样?

    任何语言不可能把一个值删除,然后导致这个值在程序中不能使用,所以 JavaScript 认为“所有删除值的 delete 就直接返回 true

    delete {}    	//true
    delete 0	//true
    

    所以“delete 表达式”归根到底,是在删除一个表达式的、引用类型的结果(Result),而不是在删除 x 表达式,或者删除表达式的值(Value),所以上面两个语句的结果都是true。

    delete null 和 delete undefined 的奇妙展示

    我想大多数人和我一样认为这是在删除一个值,所以结果应该都是true,但是执行结果啪啪打脸。 "delete undefined" 是个false,因为undefind 居然是全局变量的属性,还是只读的。

    下面请看大神是如果解释的。
    早期的JavaScript中,undefined是一个特殊值,是在运行期中通过void运算,或者不返回值的函数,又或者一个声明了但未赋值的变量,等等类似这样的情况来“计算得到”的。所以在JavaScript的早期版本中,你没有办法直接判断“undefined是undefined”,例如无法写出“x === undefined”这样的代码,而你只能写类似“typeof(x) ==='undefined'”这样的代码。

    后来(其实也没有太久),规范就约定把undefined作为可以缺省访问的名字,类似于null。但是这个时候就带来了一个矛盾,因为这个undefined很重要,早期的绝大多数框架或引擎都把它作为一个“全局名字”给声明了。也就是说,ECMAScript现在既没有办法将它规范成一个keyword,也没有办法处理成保留字等等,它看起来像null,但又没有办法在规范层面强制它。所以……ECMAScript就搞了一个“奇招”:

    嗯嗯,很好。所以你看,现在的引擎上面undefined看起来长得跟null值差不多,而且在ECMAScript规范中它们都还是平级的(是原始值),而且它们的作用也很接近,最后他们都还是从最初的JavaScript 1.x中就存在的概念,但是undefined/null两者却在实现上完全不同:undefined是一个全局属性,而null是一个关键字。

    由于undefined是全局属性,所以delete undefined其实就是delete global.undefined,是删除引用,而不是删除值。而这个属性是只读的,所以就返回false了。

    例如你可以试试下面的代码:

    { value: undefined, writable: false, enumerable: false, configurable: false }

    思考题

    • delete x 中,如果 x 根本不存在,会发生什么?
    • delete object.x 中,如果 x 是只读的,会发生什么?

    答案

    1. true
    
    a={
        b:5,
        c:function(){
            console.log(delete b);
        }
    };
    a.c();
    
    1. false

    起源地下载网 » JavaScript核心原理解析--delete 0

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元