美文网首页程序员
由delete Function.length引发的一些思考

由delete Function.length引发的一些思考

作者: purple_force | 来源:发表于2017-02-17 12:13 被阅读0次

delete:

在JS中,delete操作符用来删除一个对象的属性,其基本用法为:

delete object.property

delete object["property"]

严格模式中,如果属性是一个不可配置(non-configurable)属性,删除时会抛出异常,非严格模式下返回false,其他情况都返回true

可以使用delete操作符来删除一个隐式声明的全局变量,也就是没有使用var声明的全局变量。全局变量其实是global对象(window)的属性。但是对于使用var声明的变量,则无法通过delete删除。

var a=1;
    b=2;
delete window.a;
delete window.b;
console.log(window.a);
console.log(window.b);

运行结果如下:

结果1.png

对于var声明的全局变量a,并没有删除成功,而隐式声明的全局变量b,删除成功了。通过查看window的属性ab的属性描述符:

var a=1;
    b=2;
console.log(Object.getOwnPropertyDescriptor(window,"a"));
console.log(Object.getOwnPropertyDescriptor(window,"b"));

结果如下:

结果2.png

可以看到,通过var声明的全局变量a,其属性描述configurablefalse,表明其不可通过delete操作符删除。而未通过var声明的全局变量b,其属性描述configurabletrue,表明其可以通过delete操作符删除。

至于,为什么通过var声明和未通过var声明的全局变量的属性描述configurable会有这样的差异,目前不得而知,可能是JS规范中的要求,还请知道的小伙伴告知。

Function.length:

函数length属性表示的是函数的形参个数,不包括 剩余参数,当形参中存在默认值时,只包括第一个有默认值的形参的前面的参数。

为什么此处说函数length属性,而没有说Functionlength属性呢😝。因为Function构造函数也是函数,因此,Function也是Function的实例:

结果3.png

怎么感觉自己既是自己的老子,又是自己儿子呢,哈哈,开玩笑。

当访问length属性时,Function与普通函数没有区别,都是访问自身的属性:

结果4.png

delete Function.length:

终于到正题了,上图:

结果5.png

看到结果,万千🐎奔腾而过啊,不是删除成功了,他喵的,怎么访问length属性还是访问到了呢,还变成了0

细细想过,不对,此length可能非彼length了,有可能是Function.prototype上的,于是就开始验证:

结果6.png

果不其然,执行delete Function.length后,Function.length访问的其实是Function.prototype.length,待delete Function.prototype.length后,Function.length就访问不到了。

相关文章

  • 由delete Function.length引发的一些思考

    delete: 在JS中,delete操作符用来删除一个对象的属性,其基本用法为: 在严格模式中,如果属性是一个不...

  • 由#import引发的一些思考

    中午吃饭和@赵总聊天,谈到了iOS项目中出现的关于不理性的import问题,以本文来聊一聊关于在一个工程中从imp...

  • 由汽车追尾引发的一些思考

    一大早,我们开车赶路。在某一个红绿灯路口停下来,只听砰得一声,汽车像跳迪斯科一样的扭动了一下,我下意识感到汽...

  • 由一些小问题引发的思考

    如何判断数组是否为空? c++实现 php实现 关于PHP的empty函数php-manual中这样解释:一下情况...

  • 由“整理衣服”引发的一些思考

    每年夏冬交替或春夏交替时,广东的家庭主妇们就要实施一年两度的衣物整理行动。广东的季节不是这么分明,你得考虑季节的多...

  • 由集成ARouter引发的一些思考

    引子 最近打算把项目的各个页面按模块的不同做拆分,也就是简单地想做下组件化的改造吧,那么这样一来不同模块的各个页面...

  • 由阅读困惑引发的一些思考~

    1.在读《世界哲学史》的过程中,很喜欢这本书的书写逻辑,想到将来等自己更博学一点,也许可以想写点阅读历程的文字。 ...

  • 由文字引发思考

    我是一个平常喜欢随意写点东西的假文艺青年,我喜欢文字,喜欢它的质感。我感觉语言并不能完全展现文字的美,...

  • 由听歌引发的思考

    上课前的几分钟,为了让我的学生们释放一下上节课的疲劳,我习惯提前进到教室,给他们放一首歌,中文或者英文都有。有一次...

  • 由错题引发的思考

    今天给孩子检查作业,他说:“别检查前面的”,觉得有猫腻,便我拿过来看看,吓一跳,前面的好多没做的,再细看惨不忍睹。...

网友评论

    本文标题:由delete Function.length引发的一些思考

    本文链接:https://www.haomeiwen.com/subject/cwnhwttx.html