高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > JS 对象属性相关(检查属性 枚举属性等)【javascript】

JS 对象属性相关(检查属性 枚举属性等)【javascript】

时间:2023-02-15 08:06:59

相关推荐

JS 对象属性相关(检查属性 枚举属性等)【javascript】

web前端|js教程

对象属性

web前端-js教程

1.删除属性

手游仙境ol源码,ubuntu启用硬盘,群晖安装tomcat教程,爬虫选择代理,php网站开发论文,seo推广软件金口碑网络专业lzw

delete运算符可以删除对象的属性

安卓源码加密,vscode运行ruby,ubuntu的软件安装在哪,改变 tomcat 端口,csv怎么导入sqlite,ajax无刷新分页 插件,前端开发最流行的框架,爬虫怎么添加筛选条件,php 设置权限,临海seo推广,慧谷动力企业网站版权修改,网页免费代码,qq群公告模板,游戏发布站整站程序lzw

delete person.age //即person不再有属性age

delete person[age] //或者这样

个人微商城网页源码,ubuntu安装win系统,scrapy 主动停止爬虫,kudu php,seo优质商家lzw

delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性 看到delete a.p之后b.x仍然为1

var a = {p:{x:1}};var b = a.p;console.log(a.p.x); //1delete a.p;console.log(a.p.x); //TypeError a.p is undefinedconsole.log(a.p); //undefinedconsole.log(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

比如

delete Object.prototype; // 不能删除 不可配置var x = 1;delete this.x; //不能删除this.y = 1;delete y; //这样可以删除function f(){ }delete this.f; //不能删除

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() — 后者是前者的增强

顾明思议

var obj = {x:1};console.log(obj.hasOwnProperty("x")); //trueconsole.log(obj.hasOwnProperty("y")); //falseconsole.log(obj.hasOwnProperty("toString")); //false 因为obj继承了这个方法,但不是它自己的

只有检测到是自由属性并是可枚举的属性时,后者才返回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); //true

3.枚举属性

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()方法

var p = {x:1}; //p原型对象继承自Object.prototypevar o = Object.create(p); //o对象继承自pconsole.log(p.isPrototypeOf(o));//trueconsole.log(Object.prototype.isPrototypeOf(o));//trueconsole.log(Object.prototype.isPrototypeOf(p));//true

当然,isPrototypeOf()方法和instanceof运算符非常类似

instanceof运算符希望它的左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false

var p = {x:1}; console.log(p instanceof Object);//truevar d = new Date();console.log(d instanceof Date);//trueconsole.log(d instanceof Object);//trueconsole.log(d instanceof Number);//false

拓展2:

对象的类属性是一个字符串,用以表示对象的类型信息

一般调用toString()方法后返回形如 [object class]的形式

比如

var obj = {x:1,y:2};

console.log(obj.toString());//[object Object]

所以要想获取对象的类,就可以通过返回的字符串中找出 “class”字段 使用 slice(8,-1)

比如

function classOf(obj){ // 找出类名 if(obj === null){ return "Null"; } if(obj === undefined){ return "Undefined"; } return Object.prototype.toString.call(obj).slice(8,-1);}console.log(classOf(1)); //Number//注意,实际上是这些类型的变量调用toString()方法,而不是通过他们自身直接调用//console.log(1.toString()); //会报错var a = 1;console.log(Number(1).toString()); //1console.log(a.toString()); //1console.log({x:1}.toString()); //[object Object]console.log(classOf(1)); //Numberconsole.log(classOf("")); //Stringconsole.log(classOf("str")); //Stringconsole.log(classOf(null)); //Nullconsole.log(classOf(false)); //Booleanconsole.log(classOf({})); //Objectconsole.log(classOf([])); //Arrayconsole.log(classOf(new Date())); //Datefunction f(){}console.log(classOf(new f())); //Object

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。