学习javscript对象笔记(一)
对象(Objects) 对象属性值可以是除undefined值之外的任意值
1.对象字面量
a.{} b.new object();
注意事项: 在对象字面量中,如果属性名是一个合法的javascript标识符且不是保留字,则并不强制要求用引号扩住属性名。
JavaScript标识符中包含连接符(-)是不合法的,但允许包含下划线(_);
例: var stooge = {
"first-name" : 'z',
"last-name" : 'wd'
}
var flight = {
airline: "Oceanic",
num : 815
}
2.检索
要检索对象里面包含的值,可以采用在[]后缀中括住一个字符串表达式的方式。如果字符串表达式是一个字符串字面量,而且他是一个合法的javascript标识符且不是保留字,那么也可以用 . 表示法代替。优先考虑使用 . 因为它更紧凑且可读性好。
如果检索到一个并不存在的成员属性的值,将返回undefned;
例:
stooge["middle-name"] //undefined
flight.status //undefined
||(或) 运算符可以用来填充默认值
例:
var middle = stooge["middle-name"] || "(none)"
var status = flight.status || "unknown"
尝试从undefined的成员属性中取值将会导致TypeError异常,这是可以通过 && 运算符来避免错误。
例:
flight.equipment //undefined
flight.equipment.model //undefined
flight.equipment && flight.equipment.model //undefined
3.更新
如果属性名已经存在对象里,那么这个属性的值就会被替换。
如果哦对象之前没有拥有那个属性名,那么该属性就被扩充到对象中。
4.引用
对象通过引用来传递。它们永远不会被复制。
var a ={}, b={}, c={};
//a、b和c每个都引用一个不同的对象
a=b=c={};
//a、b和c都引用同一个空对象
5.原型
每个对象都连接到一个原型对象,并且它可以从中继承属性。所以通过对象字面量创建的对象都连接到object.prototype,它是javascript中的标配对象。
当你创建一个新对象时,你可以选择某个对象作为它的原型。
原型连接只有在检测值的时候才被用到。如果我们尝试去获取对象的某个属性值,但该对象没有属性名,那么javascript会试着从原型对象中获取属性值。(如果在那个原型对象没有找到属性,那么再从它的原型中寻找,以此类推,直到最终到达终点Object.prototype。如果想要的属性完全不存在原型链中,那么结果就是undefined值,这个过程叫做委托。)
原型关系是一种动态关系。如果我们添加一个新的属性到原型中,该属性会立即对所有给予该原型创建的对象可以见。
6.反射
typeof操作符对确定属性的类型有很大帮助。
例:
typeof flight.number //'number'
typeof flight.status //'string'
注意:原型链中的任何属性都会产生值
例:
typeof flight.tosting //'function'
typeof flight.constructor //'function'
处理掉不需要的属性
hasOwnProperty() 如果对象拥有独有的属性,他将返回true。它不会检测原型链。
例:
flight.hasOwnProperty('number') //true
flight.hasOwnProperty('constructor') //false
7.枚举
for in 语句可用来遍历一个对象中的所有属性名。该枚举过程中将会列出所有的属性——包括函数和你可能不关心的原型中的属性——所以有必要过滤掉那些你不想要的值。最为常用的过滤器是hasOwnProoperty方法,以及使用typeof来排除函数。
例:
var name;
for(name in flight) {
if(typeof flight[name] !== 'function') {
//可以获取到不是方法的属性值。
}
}
for in 枚举出来的属性名出现的顺序是不确定的,如果确保要以特定的顺序出现,避免使用 for in 语句,而是创建一个数组。
8.删除
delete运算符可以用来删除对象的属性。如果对象包含属性,那么该属性就会被移除。它不会触及原型链的任何对象。
9.减少全局变量污染
最小化使用全局变量的方法之一是为你的应用只创建一个唯一的全局变量;
例:
var MYAPP = {}; MYAPP.stooge = {
"first-name": "Joy",
"last-name": "Howard"
} MYAPP.flight = {
airline: "Oceanic",
number: 815
}
只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或类库之间发生冲突的可能性就会降低。(闭包可以进行信息隐藏的方式,闭包是另一种有效减少全局污染的方法)
学习javscript对象笔记(一)的更多相关文章
- 学习javscript函数笔记(二)
定义: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代码复用.信息隐藏和组合调用.函数用于指定对象的行为. 1.函数对象 JavaScript中的函数就是对象,函数对象连接到Fun ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...
- JavaScript学习04 对象
JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...
- hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...
- Javascript学习4 - 对象和数组
原文:Javascript学习4 - 对象和数组 在Javascript中,对象和数组是两种基本的数据类型,而且它们也是最重要的两种数据类型. 对象是已命名的值的一个集合,而数组是一种特殊对象,它就像 ...
- 开始记录学习java的笔记
今天开始记录学习java的笔记,加油
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...
随机推荐
- 进程间传递文件描述符fd
众所周知,子进程会继承父进程已经打开的文件描述符fd,但是fork之后的是不会被继承的,这个时候是否无能无力了?答应是NO.Linux提供了一个系统调用sendmsg,借助它,可以实现进程间传递文件描 ...
- XE ListBox实现伸缩效果
功能:实现年月日压缩,初始化时item是所有年,点击年展开月,点击月展开天,再点击则收缩. 思路:实际上一开始是将所有item显示,只是将月日的item.height赋值为0, 记录每一行的it ...
- Springcloud踩坑记---使用feignclient远程调用服务404
公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法 ...
- git Problem with the SSL CA cert (path? access rights?)
问题: [root@localhost opt]# git clone https://github.com/docker/docker.git 正克隆到 'docker'...fatal: unab ...
- vs更改项目文件夹名称
改完之后会提示找不到.csproj,用文档工具打开.sln文件,把里面找.csproj的路径修改一下就好了
- JS内置对象的原型不能重定义?只能动态添加属性或方法?
昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑.情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖, 只能动态的为内置对象的原型添加属性或 ...
- Python3之random模块
一.简介 ramdom模块提供了一个随机数的函数:random() 它可以返回一个随机生成的实数,范围在[0,1)范围内.需要注意的是random()是不能直接访问的,需要导入模块random才可以使 ...
- 你必须知道的----C语言笔试面试中经典易错的一些知识点(持续更新)
1. 关于二级指针的解析和引用 1.1 二级指针意义 二级指针存放的是一级指针的地址 Ex: Int a = ; Int *p = &a; Int **q = &p; 1.2 ...
- 在StoryBoard对UICollectionViewCell 进行Autolayout是遇到的Xcode6.01的BUG
使用Sb对UICollectionViewCell 的内容进行Autolayout约束时候,发现了一个Xcode6.01的BUG,就是你对UICollectionCell约束完了之后,在模拟器上现实的 ...
- 【Jquery】jquery刷新页面(局部及全页面刷新)
下面介绍全页面刷新方法:有时候可能会用到window.location.reload()刷新当前页面.parent.location.reload()刷新父亲对象(用于框架)opener.locati ...