对象下的属性方法
in 判断属性是否属于某个对象
Object.getProperty()限定对象的属性操作
Object.getProperties()限定对象的多个属性操作
instanceof判断是否属于某个对象
Object.getPrototypeOf()获得对象原型
Object.isPrototypeOf()判断对象是否存在另一个原型上
Object.getOwnPropertyNames()返回对象下的所有属性
Object.hasOwnProperty()判断对象自身是否有指定属性
Object.keys()返回对象可枚举的属性
Object.prototype.propertyIsEnumerable()判断是否可枚举属性,返回布尔值
Object.freeze()冻结一个对象(只能查询)
Object.isFrozen()判断是否是冻结对象
Object.seal()密封一个对象(只能查询和修改)
Object.isSeal()判断是否是密封对象
Object.preventExtensions()让对象不可扩展(不能添加)
Object.isExtensible()判断是否是不可扩展的对象
判断数组的方法有哪些
1.instanceof判断,但是会判断出父类对象
x instanceof Array
2.isArray()ES5后新增的方法
Array.isArray(x)
3.通过构造器判断,每个对象都会有自己的构造器
x.constructor==Array
4.prototype判断,如果是实例可以改变this指向
Object.prototype.toString.call(x)=="[object Array]"
5.getPrototypeOf返回原型进行判断
Object.getPrototypeOf(x)==Array.prototype
判断对象的方法有哪些
同上,没有isArray()方法
typeof emp=="Object"//缺点null也会验证为对象
判断对象下的属性方法有哪些
1.in验证包括自身和原型的属性
"name" in v
2.hasOwnProperty()验证自身对象的属性
v.hasOwnProperty("age")
3.判断是否是undefined,验证包括自身和原型的属性
v.name==undefined
typeof v.age=="undefined"
遍历对象的方法有哪些
1.for in 遍历包括自身可枚举的和原型的属性
for(var k in v){console.log(k,v[k])}
2.Object.keys()遍历自身可枚举的属性
Object.keys(v)
3.Object.getOwnPropertyNames()遍历自身可枚举和不可枚举属性
Object.getOwnPropertyNames(v)
4.prototype判断,如果是实例可以改变this指向
对象的复制
深拷贝和浅拷贝
浅拷贝:在引用变量赋值给另一个变量时,引用的是一个堆内存地址,当一个变量改变时,另一个变量也跟着改变
深拷贝:在引用变量赋值给另一个变量时,开辟了一个新堆内存地址,当一个变量改变时,另一个变量不改变
1.自己遍历,实现深拷贝
var obj={age:23,name:"zhang"}
var 0={}
for(var i in obj){ o[v]=obj[v] }
2.借助数组的函数,凡是可以返回新数组的函数,都可以执行赋值
var x=[1,2,3]
var y=x.concat()
3.借助Object对象下的方法
var o=Object.assign(obj)//复制对象,实现浅拷贝
var o=Object.create(obj)//创建对象,实现深拷贝
4.ES6下的扩展运算符(...)
var x=[11,22,33]
var y=[...x]
5.Json数据格式
JSON.parse()json转化成对象
JSON.stringify()对象转化成json
缺点:对象的属性如果是symbol类型是无法复制的
var obj={name:"li",color:["red","blue"],y:{a:1,b:2}}
var json=JSON.stringify(obj)
var o=JSON.parse(json)
web第七天
最新推荐文章于 2024-09-11 00:06:23 发布