关于JavaScript 对象的理解

海军 等级 850 2 0
标签: Javascript

关于JavaScript 对象的理解

对象

理解对象

ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。

我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中的值可以是数据或函数。

每个对象都是基于一个引用类型创建的,即创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法

合并对象

它 是值 把源对象所有属性 复制到目标对象属性当中。

ES6 中提供了 Object.assign() 来合并对象。

这个方法接受一个目标对象和一个或多个源对象作为参数,然后将源对象的所有属性和自有属性 复制到目标对象当中。

合并对象除了使用Object.assign, 还可以使用 ... 对象扩展符 来简化合并对象

s

注意:

  • Object.assign() 是浅复制,如果多个源对象之间合并出现,重复属性时,会取最后一个属性的值。
// ...

var a = {
    title:'初级前端工程师'
}

var b = {
    address: '北京中关村'
}

var c = { ...a, ...b}
console.log(c) 
// { title: '初级前端工程师', address: '北京中关村' }





//Object.assign()
var job = {
    title:'高级前端工程师'
}

var salary = {
    wage: '22w'
}

var HaiJun = {}

console.log(Object.assign(HaiJun,a,job,salary)) 
//{ title: '高级前端工程师', wage: '22w' }

对象标识类型及相等判断

ES6 中提供 了 Object.is() 方法,它接受两个参数。

console.log(Object.is(1,"1")) //false

console.log(Object.is({},{})) //false

console.log(Object.is(+0, 0))   //true

var objA = {
    id:2
}

var objB = {
    id:2
}

console.log(Object.is(objA.id,objB.id)) //true

对象的属性

ECMA-262第5版在定义了只有内部才用的特性时,描述了属性的各种特征,这些特征是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问它们。

JavaScript 中,对象的属性类型 为: 数据属性访问器属性.

数据属性

定义: 数据属性包含一个数据值的位置,这个位置可以读取和写入值,可通过对象直接定义的属性。数据属性有四个描述其行为的特性。

它有 4 个特定行为来约束属性行为

按时

注意:

  • 在调用 Object.defineProperty() 时,如果不指定 属性的默认行为的话,它的 3 个行为 都 为 false .

实际开发中,修改属性默认行为场景很少,但学习属性的行为 有助于 理解对象。

属性
[[Configurable]] 表示是否可以通过 delete 删除对象属性,默认为 true
[[ Enumberable ]] 表示 对象属性是否 可以 通过 for-in 来循环。默认为true
[[ Writable]] 表示 对象属性的值是否可以修改,默认为true
[[Value ]] 表示 对象属性的实际值。
如何修改对象属性默认行为

通过 Object.defineProperty() 来修改属性默认行为

参数为:

  • 目标对象
  • 要修改的对象属性
  • 一个描述符对象 (这个对象是用来管理属性默认行为的)

该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

let obj = {
    code: 200,
    title: '前端自学社区',
}

Object.defineProperty(obj,"code",{
    writable: false  //禁止修改对象属性 code
})

obj.code = 201


console.log(obj)  // 返回{ code: 200, title: '前端自学社区' }

访问器属性

它 包含 一个 setter 函数 和 getter 函数,用来返回属性值和修改属性的值.

当属性被修改时,获取调用setter 函数。

当属性要获取值时,会调用getter 函数。

实际开发中,这个两个属性不是必须的,看自己业务需求

如果一个属性的值变化,影响到另一个属性的值的时候,就可以使用 settter getter 来实现。

let obj = {
    code: 200,
    title: '前端自学社区',
}

Object.defineProperty(obj,"mounth",{
    set(newValue){
        if(newValue >3) {
            this.code = 400
        }
    },
    get(){
        return this.code
    }
})
obj.mounth = 4
console.log(obj)  //{ code: 400, title: '前端自学社区' }

读取属性的行为

要读取属性的特性,必须使用ECMAScript5的:Object.getOwnPropertyDescriptor() 来获取对象属性的行为。

该函数接受两个参数:

  • 目标对象
  • 要获取的属性

该方法返回指定对象上一个自有属性对应的属性描述符。

let obj = {
    code: 200,
    title: '前端自学社区',
}

const des = Object.getOwnPropertyDescriptor(obj,'code')
console.log(des) 
//{ value: 200, writable: true, enumerable: true, configurable: true }
console.log(des.writable) //true

结语

❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章

关注公众号 “前端自学社区”,即可获取更多前端高质量文章!

关注后回复关键词“加群”, 即可加入 “前端自学交流群”,共同学习进步。

关注后添加我微信拉你进技术交流群

欢迎关注公众号,更多精彩文章只在公众号推送

收藏
评论区

相关推荐

What the f*ck JavaScript?
What the fck JavaScript? 一个有趣和棘手的 JavaScript 示例列表。 JavaScript 是一种很好的语言。
javascript实践教程-01-javascript介绍
本节目标1. 了解javascript是什么。2. 了解javascript能干什么。 内容摘要本篇介绍了javascript是什么,为什么要用javascript,ECMAScript标准是什么等。阅读时间大约510分钟。 javascript是什么?javascript是世界上最流行的脚本语言,因为你在电脑、手机、平板上浏览的所有的网页,以及无数基于HT
javascript实践教程-02-javascript入门
本节目标1. 掌握如何编写javascript代码。2. 掌握javascript的3个弹框。3. 掌握javascript的注释。4. 掌握浏览器的调试工具控制台。 内容摘要本篇介绍了如何在网页上编写js代码,如何引入外部js代码文件,js的3个弹框、注释语法,还有浏览器调试工具的控制台使用。阅读时间1520分钟。 script标签如果我们需要在网页中编写
JS的另类写法(书签栏工具原型)
<script type="text/javascript"> javascript : void (function(version) { var scriptTag = document.createElement('script'); scriptTag.type = 'text/javascript';
ECMAScript 6.0 简介
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 ECMAScript 和 JavaScript 的关系 --------------------------- 一个常见的问题是,EC
JavaScript 非常重要的几个概念
JavaScript是一门比较复杂的语言。如果你是一名JavaScript开发人员,不管处于什么样的水平,都有必要了解JavaScript的基本概念。小编最近的工作涉及到JavaScript,于是本文就介绍了几个非常重要的 JavaScript 概念,但绝对不是说JavaScript 开发人员只需要知道这些就可以了。 01-变量赋值(值与引用) Java
JavaScript中的“ new”关键字是什么?
### 问题: _The `new` keyword in JavaScript can be quite confusing when it is first encountered, as people tend to think that JavaScript is not an object-oriented programming languag
JavaScript基础系列
![JavaScript基础系列](https://oscimg.oschina.net/oscnet/c1dc2f84f95d13105d79ba82a648f0c5eab.png) > JavaScript基础系列 ![image.png](https://oscimg.oschina.net/oscnet/e16bf4232aab0acb21c56
JavaScript的 基本数据类型
**第一:Javascript对象是** **第二:Javascript中** **第三:Javascript的对象是数据;** **第四:JavaScript 中的对象可以简单理解成"名称:值"对(name:value)。名称(name):"名称"部分是一个 JavaScript 字符串** **参考----------https://www
JavaScript的入门简介
#### 什么是 JavaScript JavaScript,我们一般简称为 JS,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。 JavaScript 现在已经被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并支持面向对象、命令式和声明式风格。 HTML、CSS、JavaScript三者不同的功能:
Javascript解析机制 执行机制
HTML5学堂:在学习JavaScript过程中,我们需要了解事件的机制是怎么执行的?本文将会提到JavaScript事件机制的解析,希望对大家有帮助! javascript解析的过程主要分为两个阶段,分别是编译与执行阶段。 在编译期,javascript解释器将完成对javascript代码的预处理,即将javascript代码转换为字节码。 在执行
Node.js
1.Node来历 --------     2009年,正是推出基于Javascript语言和V8引擎的开源Web服务项目,命名为Node.js,Node.js是第一次把Javascript带到后端开发。全很很多开发人员都熟悉Javascript,所以Node.js一下子就火了。     Javascript语言本身是完善的函数式语言,在前端开发时,开发
Node.js 简单学习
明白 JavaScript 语言,你就会用 Node.js 了。最常见的运行 JavaScript 语言的地方就是用户的浏览器,几乎所有的浏览器上都有个 JavaScript 引擎,这个引擎负责运行在页面中嵌入的 JavaScript 代码。代码是在用户的浏览器上运行的,用户那头叫前端(Frontend),服务器这头叫后端(Backend)。Node.js
Node.js简介及如何学习Node.js
本文介绍Node.js的诞生史以及如何学习Node.js。 Node.js简史 --------- 从Node.js的命名上可以看到,Node.js的官方开发语言是JavaScript。之所以选择使用JavaScript,显然与JavaScript的开发人员多有关。总所周知,JavaScript是伴随着互联网的发展而火爆起来的,JavaScript也是前
Springmvc异步上传文件
<script src="js/jquery.js" type="text/javascript"></script><script src="js/jquery.ext.js" type="text/javascript"></script><script src="js/jquery.form.js" type="text/javascript"