时间:2021-05-26
1.删除属性
delete运算符可以删除对象的属性
复制代码 代码如下:
delete person.age //即person不再有属性age
delete person['age'] //或者这样
delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性 看到delete a.p之后b.x仍然为1
delete只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,当然,这会影响到所有继承来自这个原型的对象)
function inherit(p){ if(p == null){ // 不能从null中继承 throw TypeError(); } if(Object.create){ //如果有这个方法就直接使用 return Object.create(p); } var t = typeof p; if(t !== "object" || t !== "function"){ //要继承的对象 类型要符合 throw TypeError(); } function f(){ }; //定义一个空的构造函数 f.prototype = p; //原型指向要继承的对象p return new f(); //创建f对象,此对象继承自p}var obj = {x:1};var obj1 = inherit(obj);obj1.y = 2;console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = 2delete obj1.x;delete obj1.y;console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = undefined当然了,可配置的属性才能用到delete
比如
2.检测属性
使用 “in"
in 运算符希望它的左操作数是一个字符串或者可以转换为字符串,希望它的右操作数是一个对象
var data = [5,6,7];console.log("0" in data); //有下标0console.log(1 in data); //1可以转换成"1"console.log("4" in data); //下标只有 1 2 3 var obj = {x:1};console.log("x" in obj); //trueconsole.log("y" in obj); //falseconsole.log("toString" in obj); //true 因为obj继承了这个方法使用hasOwnProperty()或者propertyIsEnumerable() --- 后者是前者的增强
顾明思议
只有检测到是自由属性并是可枚举的属性时,后者才返回true
var obj = {x:1};console.log(obj.propertyIsEnumerable("x")); //trueconsole.log(obj.propertyIsEnumerable("y")); //falseconsole.log(obj.propertyIsEnumerable("toString")); //false 因为obj继承了这个方法,但不是它自己的console.log(Object.prototype.propertyIsEnumerable("toString")); //false 因为最原始的的 toString就是不可枚举的当然,也可以直接用 ”!=="运算符判断
var obj = {x:1};console.log(obj.x !== undefined);//trueconsole.log(obj.y !== undefined);//falseconsole.log(obj.toString !== undefined); //true3.枚举属性
var obj = {x:1,y:2};for(p in obj){ console.log(p);//x y console.log(obj.p);// undefined undefined console.log(obj[p]);//1 2}拓展1:
每个对象都有与之相关的原型(prototype)、类(class)、可扩展性(extensible)
要检测一个对象是否是另一个对象的原型(或处于原型链中),可以使用isPrototypeOf()方法
当然,isPrototypeOf()方法和instanceof运算符非常类似
instanceof运算符希望它的左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false
拓展2:
对象的类属性是一个字符串,用以表示对象的类型信息
一般调用toString()方法后返回形如 [object class]的形式
比如
复制代码 代码如下:
var obj = {x:1,y:2};
console.log(obj.toString());//[object Object]
所以要想获取对象的类,就可以通过返回的字符串中找出 “class"字段 使用 slice(8,-1)
比如
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javaWeb四大域对象1)和属性相关的方法ObjectgetAttribute(Stringname)获取指定的属性EnumerationgetAttribu
与in操作符相比,forin在循环对象的属性时也会遍历原型链,forin不会读取不可枚举属性,如数组的length属性。小结当检测某个对象是否拥有某个属性时,h
比较难哦。做好心里准备吧。。。。。。深呼吸。。。1,for/in:一种遍历(枚举)对象属性的方法,可以循环我们呢事先不知道的属性。它可以枚举处用户定义的所有属性
计算对象的长度,即获取对象属性的个数,具体如下方法一:通过forin遍历对象,并通过hasOwnProperty判断是否是对象自身可枚举的属性varobj={"
此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。in操作检查对象中是否有名为property的属性。也可以检查对象的原型,判断该属