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

你不知道的JavasScript上篇·第三章·对象的更多相关文章

  1. 你不知道的JavasScript上篇·第四章·混合对象·类

    一.类的理论 1.类的核心概念:多态 是说父类的通用行为可以被子类用更特殊的行为重写 二.类的机制 1.构造函数 类实例是有一个特殊的类方法构造的,这个方法名通常和类名一致: 类构造函数属于类,构造函 ...

  2. 你不知道的JavasScript上篇·第五章·原型·上

    1.[[Prototype]] JS中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用.几乎所有的对象在创建时这个属性都被赋予一个非空的值 (proto) var my ...

  3. 你不知道的JavasScript上篇·第五章·原型·下

    5.差异继承 继承意味着复制操作: 差异继承: 基本原则是在描述对象行为时,使用其不同于普遍描述的特制. (我的理解是只用对象自身的而不用普遍继承的像是toString(),valueOf()这种方法 ...

  4. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

  5. javascript面向对象精要第三章对象整理精要

    什么是对象的数据属性?什么是对象的访问器属性?[put]方法是默认创建数据属性的,访 问器属性不包含值而是定义了一个单属性被读取时调用的函数(getter)和当一个属性被写入时 调用的函数(sette ...

  6. 《Java并发编程实战》第三章 对象的共享 读书笔记

    一.可见性 什么是可见性? Java线程安全须要防止某个线程正在使用对象状态而还有一个线程在同一时候改动该状态,并且须要确保当一个线程改动了对象的状态后,其它线程能够看到发生的状态变化. 后者就是可见 ...

  7. java并发编程实战:第三章----对象的共享

    我们不仅仅希望防止某个线程使用某个状态时,另一个线程在修改它:我们还希望某个线程修改了某个状态后,其他线程能够看到状态的变化. 一.可见性 重排序:在没有同步的情况下,编译器.处理器可能对代码的执行顺 ...

  8. 【读书笔记】C#高级编程 第三章 对象和类型

    (一)类和结构 类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类和结构的区别:内存中的存储方式.访问方式(类是存储在堆上的引用类型,结构是存储在栈的值类型)和它 ...

  9. 第三章 对象(JavaScript:语言精粹)

      对象是属性的容器,其中每个属性都有名字和值.   3.0. 概览:对象字面量 | 检索 | 更新 | 引用 | 原型 | 反射 | 枚举 | 删除 | 减少全局变量污染   3.1. 对象字面量 ...

随机推荐

  1. 【wireshark】插件开发(五):C插件

    1. Wireshark对C插件的支持 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节( ...

  2. 如何做好错误处理?(PHP篇)

    起因 之前我在封装 PHP 一个类库的时候,如果有遇到错误(例如构造函数传参不合法的话),则直接 die() ,后来发现这种方法很不好,会直接退出程序. 所以我想到给 PHP 上异常捕获的机制了. 错 ...

  3. Yarn 资源调度框架

    Yarn 资源调度框架    实现对资源的细粒度封装(cpu,内存,带宽)    此外,还可以通过yarn协调多种不同计算框架(MR,Spark)    概述        Apache Hadoop ...

  4. python使用(四)

    1.file_os_option.py2.file_option.py3.configfile_option.py4.logger_option.py 1.file_os_option.py # co ...

  5. ThreadPoolExecutor策略配置以及应用场景

    ThreadPoolExecutor 是用来处理异步任务的一个接口,可以将其理解成为一个线程池和一个任务队列,提交到 ExecutorService 对象的任务会被放入任务队或者直接被线程池中的线程执 ...

  6. 【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  7. 轻量级web富文本框——wangEditor使用手册(1)——基本应用 demo

    最新版wangEditor: 配置说明:http://www.wangeditor.com/doc.html demo演示:http://www.wangeditor.com/wangEditor/d ...

  8. JDBC Oracle sys 用户连接

    Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( &quo ...

  9. keepalived之单播----k8sHA准备

    一.概述 keepalived主要有三个模块,分别是core.check和vrrp.core模块为keepalived的核心,负责主进程的启动.维护以及全局配置文件的加载和解析.check负责健康检查 ...

  10. Prometheus+Grafana打造Mysql监控平台

    prometheus/node_exporter/mysqld_exporter都是由go语言编写,需要先安装GoLang环境 下载node_exporter(监控服务器的CPU.内存.存储使用情况) ...