理解JavaScript对象

对象是JavaScript的基本数据类型。对象是一种复合值:将很多值(原始值或者其他对象)聚合在一起。

JavaScript对象不仅可以保持自有的属性,还可以从原型对象继承属性。对象的方法通常是继承的属性。原型式继承是JavaScript的核心特征。

JavaScript对象是动态的——可以新增属性也可以删除属性,除了字符串,数字,true,false,null和undefined之外(当使用他们的属性方法时,会隐式的变成包装对象),JavaScript中的值都是对象。

对象是可变的,我们通过引用而非值来操作对象,如果变量x是指向一个对象的引用,那么执行代码var y=x;变量y也是指向同一个对象的引用,而非这个对象的副本,通过变量y修改这个对象亦会对变量x造成影响。

JavaScript规定,如果行首是大括号,一律解释为语句(即代码块)。如果要解释为表达式(即对象),必须在大括号前加上圆括号。

对象的最常见的用法是:

创建(create),设置(set),查找(query),删除(delete),检测(test),枚举(enumerate)它的属性。

1.对象创建:

对象的生成方法,通常有三种方法。除了像上面那样直接使用大括号生成({}),还可以用new命令生成一个Object对象的实例,或者使用Object.create方法生成。

第一种:对象直接量
var point={x:0,y:0;} 第二种:通过new后面加上构造函数创建对象
var o=new Object(); 第三种:通过Object.create方法生成
var o=Object.create(null);//这个方法可以传入原型对象

总结:一般来说,第一种采用大括号的写法比较简洁,第二种采用构造函数的写法清晰地表示了意图,第三种写法一般用在需要对象继承的场合。

2.对象属性的设置与查询

查询
o.x或者o["x"] 设置
o.x=2或者o["x"]=2

3.属性的删除

delete o.x
delete只能删除自由属性,不能删除继承属性

4.属性的检测

javascript对象可以看作属性的集合,我们经常会检测集合中成员的所属关系,判断某个属性是否存在于某个对象中。

(1)in运算符

运算符左侧是属性名,右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true。
"x" in o

(2)hasOwnProperty()

用于检测给定的名字是否是对象的自有属性。对于继承属性它将返回false。
o.hasOwnProperty("x")

(3)propertyIsEnumerable()

propertyIsEnumerable()是hasOwnProperty()的加强版,只有检测到是自有属性且这个属性的可枚举性为true时它才返回true
o.propertyIsEnumerable("x")

5.属性枚举

通过使用for/in循环可以在循环体中遍历对象中所有可枚举的属性(包括自由属性和继承的属性)。对象继承的内置方法不可枚举,但是代码中给对象添加的属性都是可枚举的。

示例:遍历对象的所有可枚举属性
for(property in o){ } 示例:遍历对象的自有属性
for(property in o){
if(!o.hasOwnProperty(property)) continue; //跳过继承的属性
console.log(property);//输出自有属性
} 示例:跳过方法
for(property in o){
if(typeof o[property] === "function") continue; //跳过方法
}

理解JavaScript对象的更多相关文章

  1. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  2. 理解javascript 对象,原型对象、闭包

    javascript作为一个面向对象的语言,理解 对象.原型.闭包.模块模式等技术点对于成为一名合格的javascript程序员相当重要,多年没写过blog,今天就先拋个玉,在下基本也不做前端,但颇感 ...

  3. 如何理解javaScript对象?

    在我们生活中,常常会提到对象一词,如:你找到对象了吗?你的对象是谁呀?等等. 在我们家庭中,有男友的女青年都会说我有对象了,那么她的对象是XX(她的男友). 夫妻间呢?都会说我的爱人是谁谁谁,现在我们 ...

  4. JavaScript大杂烩3 - 理解JavaScript对象的封装性

    JavaScript是面向对象的 JavaScript是一种基于对象的语言,你遇到的所有东西,包括字符串,数字,数组,函数等等,都是对象. 面向过程还是面向对象? JavaScript同时兼有的面向过 ...

  5. 深入理解javascript对象系列第三篇——神秘的属性描述符

    × 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值 ...

  6. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

  7. 理解 JavaScript 对象原型、原型链如何工作、如何向 prototype 属性添加新的方法。

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...

  8. JavaScript大杂烩4 - 理解JavaScript对象的继承机制

    JavaScript是单根的完全面向对象的语言 JavaScript是单根的面向对象语言,它只有单一的根Object,所有的其他对象都是直接或者间接的从Object对象继承.而在JavaScript的 ...

  9. 理解Javascript的动态语言特性

    原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...

随机推荐

  1. .net core 第一篇选择开发工具和环境

    .net core 已经发布三年了,社区也逐步成熟.作为微软阵营的一员,忙了一年年底抽点时间系统学习下.学习资料主要为以下为主: 1. https://docs.microsoft.com/zh-cn ...

  2. Winform DataGridView列的单元格中动态添加图片和文字

    先上图在说,第二列中图片和文字的样式 1.需要重写DataGridViewTextBoxColumn,新建类TextAndImageColumn.cs using System; using Syst ...

  3. element ui tabl 输出Html

    在使用element ui的表格的时候有遇到过表格中的数据需要换行的问题,数据是由后台传回的包含分隔符的字符串,在尝试过使用slot和直接输出html后并不能实现 解决方法:使用column的form ...

  4. 一:ActiveMQ知识整理

    一:JMS概念 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消 ...

  5. shell编程之export

    shell 与 export命令用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令 或声明变量,也可以创建并运行shell脚本程序.运行shell脚本 ...

  6. SQL2008使用with求余额表,流水账方式

    1.先准备数据,将要求余额的表数据插入临时表 SELECT Serial, VoucherNum, SubjectNum, SubjectName, Direction, Amount INTO #T ...

  7. bzoj2119 股市的预测

    传送门 感觉智商莫名其妙的就变低了……写这题的时候死活想不出来…… 做法其实不难…… 题目要求形如ABA的串的个数,我们可以枚举A的长度,利用标记关键点的方法统计答案.设枚举到的答案为k,每k个点标记 ...

  8. JSTL数据格式化

    日期表示 <fmt:formatDate value="${DATE1}" pattern="yyyy-MM-dd hh:mm:ss" type=&quo ...

  9. .NET开源工作流RoadFlow-Bug修改-1.8.2表单验证时ueditor编辑非空验证无效

    RoadFlow生成的表单,Ueditor编辑器不能进行非空验证的BUG修改: 1.修改控制器:WorkFlowFormDesignerController红框处: 2.修改js文件:Scripts/ ...

  10. SharePoint 2013 - Host-named Site Collection

    1. 详细操作可参考此文章 的 Deployment and configuration for host-named site collections区域,简单来说,需要以下三行PowerShell ...