当前位置:首页 > 日记 > 正文

js的内部特性和删除操作符的引入

js的内部特性和删除操作符的引入
在解释可配置之前,让我们先看看面试问题:
a = 1;
console.log(窗口。一个); / / 1
Console.log (delete window.a); / / true
console.log(窗口。一个); / /未定义

var b=2;
console.log(窗口。B); / / 2
console.log(删除窗口。B); / /假
console.log(窗口。B); / / 2
从上面的问题你可以看出两者之间的区别:不要使用var语句变量,使用删除关键字可以被删除,它再次得到未定义;在一个变量中用var声明,使用删除是不删除的,然后得到它仍然是2。

1。删除操作员
当使用删除删除变量或属性时,删除成功地返回为true,否则返回false。

除了上述两种情况之外,还有许多其他常见的变量可以通过删除删除,不能删除。当我们不关心删除变量时,为什么要产生这样的结果,这里只看他的返回值:

删除删除数组中的一个元素:
对~的使用不是为了循环,忽略元素。
对于()的使用可以获得元素,但是值是未定义的。
var arr = { 1, 2, 3,4 };
console.log(ARR); / / { 1, 2, 3,4 }
console.log(删除ARR { 2 }); / /真实,删除成功
console.log(ARR); / / { 1, 2,4 },
删除函数类型的变量:
不能删除Chrome浏览器;Firefox可以被删除。
函数(){
}
console.log(功能);
console.log(删除功能);
console.log(功能);
删除function.length,这是获得的参数,参数的个数:
func1函数(A,B){
}
console.log(func1。长度); / / 2
console.log(删除func1。长度); / /真实,删除成功
console.log(func1。长度); / / 0
删除公共变量:
console.log(删除南); / /假,删除失败
console.log(删除未定义); / /假
console.log(删除无限); / /假
console.log(删除无效); / /真实,删除成功
删除原型,而不是删除原型上的属性:
功能人(){
}
person.prototype.name =蚊子;
console.log(删除的人。原型); / /错误,无法删除
console.log(删除对象。原型); / /假
当数组和字符串的长度被删除时:
var arr = { 1, 2, 3,4 };
console.log(arr.length); / / 4
console.log(删除arr.length); / /假,删除失败
console.log(arr.length); / / 4

var str = 'abcdefg;
console.log(str.length); / / 7
console.log(删除str.length); / /假,删除失败
console.log(str.length); / / 7
当对象的属性删除:
var obj = {姓名:'wenzi,年龄:25 };
console.log(对象的名字); / /文
console.log(删除对象的名字); / /真实,删除成功
console.log(对象的名字); / /未定义
console.log(obj); / / { 25 }年龄:
对象属性删除,从结果可以看到下面的输出,使用DELETE删除属性,只删除对象本身的属性的实例,但不能删除原型属性,即使不删除的删除;属性或方法,如果你想删除的仅是原型属性:删除person.prototype.name:
功能人(){
this.name = 'wenzi;
}
person.prototype.name =蚊子;
学生=新人();
console.log(学生姓名); / /文
console.log(删除学生的名字); / /真实,删除成功
console.log(学生姓名); / /蚊子
console.log(删除学生的名字); / /真的
console.log(学生姓名); / /蚊子
console.log(删除的人。原型。名称); / /真实,删除成功
console.log(学生姓名); / /未定义
2的内部性质。js
在上面的例子中,一些变量或属性可以成功删除,而一些变量或属性不能被删除。什么决定了变量或属性是否可以被删除

ECMA-262第五版定义的JS对象属性的特征(比如JS引擎,无法直接从外部访问)。在ECMAscript两个属性:数据属性和访问性能。

2.1数据属性
数据属性是指在该位置读取或写入值的数据值的位置,该值有4个属性来确认其行为:

{ { } }:可显示你可以使用删除操作来删除它,重新定义它,或者你可以修改它的访问器的属性。默认的是真的;
{ { } }:指示是否可枚举属性可以返回通过在回路。默认为true;
{ { } }:表示是否可以修改属性的值。默认为true;
{ {价值} }:包含该属性的数据值。读/写的是价值。默认值是未定义的;如果name属性的实例对象的人的定义,价值is'wenzi ',和值的变化都在这个位置。
修改默认对象的特征属性(默认为true),叫Object.defineProperty()方法,它接受三个参数:对象的属性,属性名和描述对象(必须是:可配置、可枚举,可写的价值,具有一个或多个值)。

如下:
var;
object.defineproperty(人,'name',{)
配置:假 / /不能删除,不能修改属性的访问器
可写:false不能被修改
价值的价值:'wenzi ' / /的名字是Wenzi
});
console.log(人的名字); / /文
console.log(删除的人的名字); / /错误,无法删除
Person.name ='lily';
console.log(人的名字); / /文
我们可以看到,删除和重置,不person.name值有效,这是因为电话defineproperty函数修改对象的特性;值得注意的是,一旦配置设置为false,将无法再使用defineproperty修改真实(执行错误:Uncaught TypeError:不能重定义属性:名称);

2.2访问属性
它主要包括一对吸气剂和二传手功能。阅读访问属性时,它将调用getter返回有效值;写访问属性时,它调用setter和写入新值;属性有以下4个特点。

{可配置}:是否可以通过删除运算符删除重新定义的属性;
{ { } }:可列属性是否可以通过实物发现;
{ } }:读取属性时自动调用,默认值为:未定义;
{ } }:在写入属性时自动调用,默认值为:未定义;
存取属性不能直接定义,必须使用defineproperty(),定义如下:
var
_age:18
};
object.defineproperty(人,'isadult,{)
可配置:false,
获取:函数(){
如果(这。_age > = 18){
返回true;
{人}
返回false;
}
}
});
console.log(人。isadult); / /真的
然而,还有一点需要注意。当Object.defineProperty()方法设置属性,它不能同时声明访问属性(设置和获取)和数据属性(可写或价值)的同时,它意味着一个属性可写或价值属性,使物业不能宣布获得和设置,反之亦然。

如果在下面的方式定义,存取属性和数据属性同时存在:
var;
object.defineproperty(O,'name',{)
价值:'wenzi,
设置:函数(名称){
MyName = name;
},
获取:函数(){
返回我的名字;
}
});
上面的代码看起来没有什么问题,但是真正的执行是错误的,下面是:
Uncaught TypeError:无效的属性。一个属性不能有访问器和
数据属性,你可以得到它:可配置、可枚举,可与价值;

用于访问属性,你可以得到它:可配置、可枚举,得到,并设置。

由此我们可以看出,变量或属性是否可以被其内部属性可配置控制。如果可配置为true,则可以删除变量或属性,否则不能删除。

但是我们应该如何获得这个可配置的值,并且不能尝试删除它,有一种方法可以删除它!

2.3获得内部属性
ES5为我们提供了Object.getOwnPropertyDescriptor(对象属性)得到的内部特性。

如:
无功的人= {姓名:'wenzi};
无功者= object.getownpropertydescriptor(人,'name'); / /个人名称属性
console.log(者); / / {价值:文字,可写的:真的,真的,真的可枚举:可配置:}
通过Object.getOwnPropertyDescriptor(对象属性),我们可以得到4的内部属性,可控制是否变量或属性可以删除。在这个例子中,对person.name配置是正确的,并解释说,它可以被删除。
console.log(人的名字); / /文
console.log(删除的人的名字); / /真实,删除成功
console.log(人的名字); / /未定义
让我们回到采访的开始。
a = 1;
无功者= object.getownpropertydescriptor(窗口,'a');
console.log(DESP。可配置); / /真的,可以删除

var b=2;
无功者= object.getownpropertydescriptor(窗口,B);
console.log(DESP。可配置); / /错误,无法删除
结果与我们使用删除操作删除变量相同。

三.总结
不要看简单的删除操作,它包含很多原则。

相关文章

ps合成美人鱼美人鱼美人鱼

ps合成美人鱼美人鱼美人鱼

电脑软件,ps,本教程是一个美丽的夏天夏天美人鱼,这是介绍给PS。效果的课程是非常美丽的。这很难。建议使用脚本。喜欢的朋友可以跟着教程一起学习,希望能帮到你。 ps图像合成,本教程教研究人员用ps合成美丽的夏季美人鱼,合成的美人鱼教程很漂…

PS如何处理普通照片的胶片质量效果

PS如何处理普通照片的胶片质量效果

照片,如何处理,效果,质量,电脑软件,本文主要介绍PS如何用普通照片处理影片的质量,教程很简单,喜欢的朋友可以一起学习。 1。进入ACR(或LR)之前,有人成功加载登录ACR,但我失败了,所以我只能拉宽容的手到最大限度。 看右边的柱状图,把所有的细节都画…

大学的最后一个夏天,个性签名

大学的最后一个夏天,个性签名

个性签名,夏天,大学,电脑软件,在毕业酒吧里有一些帖子,看着又哭,播放器里有一些歌曲,听和哭。 文件夹里有一些照片。在我的脑海里有一些记忆的hellip;思维,眼泪落了。 明年七月,明年夏天,你还会想起我吗 当我离开学校的时候,我想我会听每一节课,看到…

ai制作漂亮的海报

ai制作漂亮的海报

海报,漂亮,电脑软件,ai,本教程是介绍给朋友,制作美丽的海报使用人工智能。教程产生的效果真的很漂亮,难度也不是很大。建议像你这样的朋友一起学习这个教程。 在本教程中,我们将学习人工智能,使美丽的海报海报。本教程制作的海报非常漂亮,学习和…

ps使用图层样式制作浮雕的发光金属

ps使用图层样式制作浮雕的发光金属

字符,图层,浮雕,样式,电脑软件,当字也用来制作金属多层,底层的样式有浮雕和做初步的笔画效果;然后复制文本,然后设置一些清晰的风格纹理和高光,然后填充到0%,可以得到更复杂的金属词。 当字也用来制作金属多层,底层的样式有浮雕和做初步的笔画效…

AI是怎么做反向的

AI是怎么做反向的

怎么做,电脑软件,AI,AI是怎么做反向的如何制作一种符号和白光的麻将,也是反向轮,在这里分享详细的AI教程,做反向舍入,需要的朋友可以参考下。 AI做反向拐角步骤,正角是软件,但是反向拐角可以用几个步骤完成。 1。首先,画一个矩形正方形, 2,选择两个…

制造浪漫的圣诞灯光效果与女星ps素

制造浪漫的圣诞灯光效果与女星ps素

圣诞,素材,灯光,女星,效果,做一个浪漫的圣诞场景,非常好。 今天,教你用简单的方法使画面看起来更梦幻,不仅是圣诞节,一般肖像作品也适用!要学习,明年的情人节! 这些照片实际上是计划了一个月,然后他们一直在做一些工作和关闭。第一个计划是采取一…

QQ手机管家充完款后怎么会没有提示

QQ手机管家充完款后怎么会没有提示

提示,常见问题,手机管家,电脑软件,QQ,QQ手机管家充完款后怎么会没有提示 在充电过程中,您需要保持手机管家程序的开放和提醒充电声音(SMS铃声)。 温馨提示:充电后电池通常充满100%。大约40分钟左右就可以满了。不同的设备略有不同。…

PS创造梦幻色彩的光束效果

PS创造梦幻色彩的光束效果

创造,光束,色彩,效果,梦幻,这篇文章教你创造梦的效果。 原 1。首先,打开原材料。 2。复制层、图像、颜色相位和饱和度的女孩,饱和度的增加是20。 3,女孩的复制层,过滤,模糊,高斯模糊,复用半径是20,这里的想法是让女孩的皮肤光滑。 4,选择模糊图层,…

PS图象处理软件烟水墨端午节

PS图象处理软件烟水墨端午节

烟水,端午节,图象,处理软件,电脑软件,制作烟雾墨水最好的方法是直接用烟雾材料。处理:首先设置所需的文本或图形;截取烟雾材料,通过变形将其粘贴到文本的笔刷上,稍后处理细节,并使用过滤器来增强效果。 制作烟雾墨水最好的方法是直接用烟雾材料…

这条裙子是什么颜色PS说这条裙子是

这条裙子是什么颜色PS说这条裙子是

这条,裙子,颜色,黑色,电脑软件,这些天来,全世界都有一条裙子着火了!微博客和微信朋友圈,我们讨论的是一个看似普通的衣服,一个普通的裙子,这裙子是什么颜色的PS说,这条裙子是黑色的,让我看看 最受欢迎的两天实际上是一条裙子,但却是一条丑陋的暴露…

许多PS教程,使你的照片美丽的不工作

许多PS教程,使你的照片美丽的不工作

教程,照片,使你,美丽,工作,一定要记住这些PS技术!!!不会使你的照片美丽!!!掌握简单的PS技巧,并先收集它有多重要。 1打开图片并执行彩色图像饱和度(- 40)以减少饱和度。 2新图层将图层混合模式改为柔光,需要用画笔工具完成几个部分的绘制,使用方便,在…