学习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 ...
随机推荐
- 升级Ubuntu 12.04下的gcc到4.7
我们知道C++11标准开始支持类内初始化(in-class initializer),Qt creator编译出现error,不支持这个特性,原因在于,Ubuntu12.04默认的是使用gcc4.6, ...
- 第07章-Spring MVC 的高级技术
Spring MVC 的高级技术 1. Spring MVC配置的替代方案 1.1 自定义DispatcherServlet配置 AbstractAnnotationConfigDispatcherS ...
- 原型(Prototype)模式
一. 原型(Prototype)模式 原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象. 从孙大圣的手段谈起 孙悟空在与黄风怪的战斗中 ...
- CMake使用技巧
前面有提到使用CMake.很多朋友提到也用过一下,没感觉它有什么好用,不知道怎么用之类. 我必要来说明一下. CMake的语法比较差,不是很优美,不是它不能用一个更好的语法,而是有一个关键优势:简单. ...
- HTML5 Canvas游戏开发实战 PDF扫描版
HTML5 Canvas游戏开发实战主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读 ...
- Android学习笔记 Gallery图库组件的使用
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- 初学python - 零碎的知识点
* 标识符命名规则 数字,字母,下划线组成,数字不能开头区分大小写 * 注释 单行:#:多行:‘ ‘ ‘ ,“”“: * 进制标识 b:二进制 o:八进制 d:十进制x:十六进制 转换:format( ...
- 可变大小、颜色边框、样式的UISwitch
1.CHSwitch.h // // 文 件 名:CHSwitch.h // // 版权所有:Copyright © 2018 lelight. All rights reserved. // 创 建 ...
- django中ModelForm解决多表单组合显示问题
一.多表单组合显示问题 在项目中用ModelForm生成页面时 当有多表单组合显示时,会显示全部的关联表单数据. 而在实际项目中可能会出现只想让用户选择部分数据,这时候这样的显示就有问题. 二.问题解 ...
- minizip -基于zlib开源代码库
转载:https://www.topomel.com/archives/979.html 一.minizip 是一套用来压缩和解压文件的工具,其基于zlib开源代码库. 开源代码下载链接:http:/ ...