对象(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对象笔记(一)的更多相关文章

  1. 学习javscript函数笔记(二)

    定义: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代码复用.信息隐藏和组合调用.函数用于指定对象的行为. 1.函数对象 JavaScript中的函数就是对象,函数对象连接到Fun ...

  2. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  3. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  4. JavaScript学习04 对象

    JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...

  5. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  6. Javascript学习4 - 对象和数组

    原文:Javascript学习4 - 对象和数组 在Javascript中,对象和数组是两种基本的数据类型,而且它们也是最重要的两种数据类型. 对象是已命名的值的一个集合,而数组是一种特殊对象,它就像 ...

  7. 开始记录学习java的笔记

    今天开始记录学习java的笔记,加油

  8. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  9. Spring.NET依赖注入框架学习-- 泛型对象的创建和使用

    Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...

随机推荐

  1. GlobalAlloc()和malloc()、HeapAlloc()

    两者都是在堆上分配内存区.  malloc()是C运行库中的动态内存分配函数,WINDOWS程序基本不使用了,因为它比WINDOWS内存分配函数少了一些特性,如,整理内存.  GlobalAlloc( ...

  2. BZOJ 3083 遥远的国度(树链剖分+LCA)

    Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要z ...

  3. UltraEdit 回车符替换空格

    查找和替换    输入 ^r^n   替换为:(空格)

  4. 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理

    第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...

  5. Linux 运维工程师经典面试题合集(不断更新中 ...)

    写在前面的话 做运维以来,关注了很多关于互联网技术,培训等乱七八糟的公众号,时不时的就会推一些各种公司的面试题过来. 大致看了一下,发现自己很多知识要么遗忘了,要么很难说出个所以然,所以这里对那些个人 ...

  6. 《C#多线程编程实战》2.8 Barrier

    不得不说,C#的同步线程的机制是真的多. 各式各样.几乎各种场景下都有可以使用的同步机制. 今天说的,就是比较有意思了. 等待的机制很简单,单纯的等待. 使用的方法我就等. 等待的东西或者内容则是你自 ...

  7. 渗透测试工具实战技巧 (转载freebuf)

    最好的 NMAP 扫描策略 # 适用所有大小网络最好的 nmap 扫描策略 # 主机发现,生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.168.56. ...

  8. HDU6299-2018ACM暑假多校联合训练1002-Balanced Sequence

    这个题的题意是给你n个字符串,认定()是一种平衡的串,两个以上连续的()()也是一种平衡的串,如果一对括号里面包含一个平衡的串,这个括号也被算在这个平衡的串之内, 如(()(()))是一个长度为8的平 ...

  9. [jvm]垃圾回收与内存分配策略

    一.垃圾回收算法 概述 JVM中,当创建的对象不再被使用的时候,此时我们认为他是无用的“垃圾”:在现代主流的商用jvm中,都是通过可达性分析来判断对象是否存活的.这个算法的基本思想是通过一系列“GCR ...

  10. springcloud微服务总结二 注册中心

    一:netflix和springcloud关系 netflix公司开源了很多组件,包括服务注册与发现(Netflix Eureka).断路器(Netflix Hystrix).负载均衡(Netflix ...