1、Object.defineProperty()&&getter、setter

  • Object.defineProperty(目标对象,属性名(string型),{

    get:function(){

    //给新增属性设置一个getter

    },

    enumerable:true//设置为可枚举属性,保证b可以出现在对象的属性列表中

    })
    var myObject = {
get a(){
return this._a_;
},
set a(val){
this._a_ = val
}
}
Object.defineProperty(myObject,"b",{
get:function(){
//注意这里必须写成get属性的形式,不然不会执行的
return this.a*2
},
enumerable:true })
myObject.a = 2;//2
myObject.b;//4

2、存在性

  • 判断对象中是否存在某个属性, in & hasOwnProperty()
    var myObject ={
a:'a'
}
("a" in myObject);//true (表达式)在js中会立即执行
("b" in myObject);//false
myObject.hasOwnProperty('a');//true
myObjec.hasOwnProperty('b');//false
  • "属性名" in 目标对象:这种方式判断的属性名是否存在,既查找目标对象本身也查找原型链
  • 目标对象.hasOwnProperty("属性名"):这种方式只会判断属性是否在目标对象上,不会查找原型链 ,但是这种方式如果我们手动的在对象上添加了hasOwnproperty方法,返回值会变得不准确

因此可以采用更加强硬的方法判断:

Object.prototype.hasOwnproperty.call(目标对象,"a");//判断目标对象上是否有属性名为a的属性

3、枚举

enumerable:可枚举性,保证属性是可以在for...in循环中出现

    var myObject = {};
Object.defineProperty(myObject,'a',{
value:'2',
enumerable:true
})
Object.defineProperty(myObject,'b',{
value:'b',
enumberable:false
})
console.log('b' in myObject);//true
console.log(Object.prototype.hasOwnProperty.call(myObject,'b');//true
for(key in myObject){
console.log(key);//最终只出现a
}

判断是否枚举及是否目标对象直接包含指定属性

目标对象.propertyIsEnumerable("属性名");//属性是否直属于目标对象且enumerable属性值为true
Object.keys(目标对象);//返回所有直属于目标对象并且可枚举的属性数组['a']
Object.getOwnPropertyNames(目标对象);//返回所有直属于目标对象的属性无论是否可枚举

4、遍历

数组中遍历:

forEach(...)遍历数组中所有值并忽略回调函数的返回值

every(...)会一直运行直到回调函数返回false

some(...) 会一直运行知道回调函数返回true

for(...of...) 循环遍历数组项的值

 var myArray = [1,2,3]
myArray.forEach(function(item,index,array){
console.log(`forEach结果:item:${item},index:${index},array:${array}`)
})
myArray.every(function(item,index,array){
console.log(`every:item:${item},index:${index},array:${array}`)
return item>3
})
myArray.some(function(item,index,array){
console.log(`some结果:item:${item},index:${index},array:${array}`);
return item >3
})

总结:

字面量创建对象:var a = {...}

构造函数创建对象:var a = new Array();

JS中对象类型有6中基本类型:string、boolean、number、null、undefined、object

内置对象:String、Number、Boolean、Object、Function、Array、Date、RegExp、Error

复制对象:

深拷贝:JSON.parse(JSON.stringify(someObj))

浅拷贝:Es6中新增的Object.assign(...) 只拷贝对象自身的属性不拷贝继承的

属性描述符:

writable:读写属性

enumerable:可枚举

configurable:可配置,一旦设置属性值不能再次通过Object.defineProperty()更改

不变性:

1.属性常量:设置writable:fale&configurable:false就可以创建一个不可修改重定义或删除的常量属性

2、禁止扩展:禁止一个对象添加新属性并且保留原属性使用Object.preventExtensions(...)

var myObject ={
a:'a'
}
Object.preventExtensions(myObject);
myObject.b = 'b';
myObject.b;//undefined,严格模式下会报错TypeError

最新文章

  1. Android SD卡存储
  2. tomcat 7.0 之文件配置
  3. 刷新SqlServer所有视图【存储过程】
  4. python 线程使用
  5. SQL---------表的约束
  6. 修饰模式(Decorator结构型)C#简单例子
  7. Java加密解密与数字证书的操作
  8. 表现层及ASP.NET MVC介绍(一)
  9. Android 4.0以后正确的获取外部sd卡存储目录
  10. Java常用类(一)String类详解
  11. Oracle 基本知识回顾
  12. BZOJ1926[Sdoi2010]粟粟的书架——二分答案+主席树
  13. 1.红黑树和自平衡二叉(查找)树区别 2.红黑树与B树的区别
  14. Python 入门(三)整数和浮点数+布尔类型
  15. 配置文件和mybatis文件存放位置导致系统启动不了
  16. sapconnector.dll download
  17. JS饼状图表数据分布插件
  18. 百度编辑器UEditor配置toolbars工具条功能按钮
  19. JLOI2018 日志
  20. windows下vue-cli及webpack 构建网站(一)环境安装

热门文章

  1. Python系列之——利用Python实现微博监控
  2. [JavaScript] html5 video标签注意事项
  3. JAVA JDK的安装及初步试用
  4. SQL 将一列多行数据合并为一行
  5. @transactional注解,报错后数据库操作回滚失败
  6. java操作数据库的基本方法
  7. _tkinter.TclError: image "pyimage1" doesn't exist 解决办法
  8. POJ 2521
  9. python多线程--Condition(条件对象)
  10. Javac中的方法