javascript权威指南笔记--javascript语言核心(四)
对象:
通过引用(而非值)来操作对象:
var obj = {"x":1,"y":2};
var copyObj = obj;
copyObj.x = 5;
console.log(obj);//{x:5,y:2}
对象最常见的用法是创建、设置、查找、删除、检测、枚举它的属性:
(一)、创建对象
(1).对象直接量创建
var empty = {};
var point = {x:1, y:2};
var point2 = {x:point.x,y:point.y};
var book = {
"main title":"Javascript",//属性名有空格,必须用引号括起来
"sub-title":"object",//属性名有连字符,必须用引号括起来
"for":"all reader",//属性名是关键字,必须用引号括起来
author:{//属性名是一个对象,不加引号
firstname:"Dvaid",
lastname:"Benjemin"
}
};
(2).通过new创建对象
var o = new Object();//相当于{}
var a = new Array();//相当于[]
var d = new Date();
var r = new RegExp("js");//相当于/js/
(二)、属性的查询和设置
(1).可以通过.或者[]来访问对象的属性,.右侧必须是一个属性名称,[]内的属性名必须以""括起来。
var lastname = author.lastname;
var firstname = author["firstname"];
(2).通过.或[]创建新的属性,或者给属性赋值。在ECMAScript3中,.后面的标识符不能使保留字,如for、class,[]内的表达式必须是字符串或者可以转换成字符串的值。
book.page = 200;//新建page属性
book["type"] = "computer";//给type属性赋值
(3).继承 通过inherit函数继承来的对象,修改对象的属性不会影响到原型链原对象的属性值。
function inherit(p){
if(p == null) throw TypeError();
if(Object.create) return Object.create(p);
var t = typeof(p);
if(t !== "object" || t !== "function") throw TypeError();
function f(){};
f.prototype = p;
return new f();
}
var accessor = {r:1,s:5};
var o = inherit(accessor);
o.x = 7;
o.y = 9;
o.r = 2
console.log("s:"+o.s);//s:5
console.log("r:"+o.r);//r:2
console.log("accessor.r:"+accessor.r);//accessor.r:1
(4).属性访问错误:查询一个不存在的属性不会报错,只是返回一个undefined,如果查询一个不存在的对象的属性就会报错。
避免出错的方法:
var len = book && book.subtitle && book.subtitle.length;//获取子对象的长度
(5).删除属性:delete只能删除自有属性,不能删除继承属性。
var a = {p:{x:1}};
var b = a.p;
delete a.p;
console.log(a);//{}
console.log(b);//{x:1}
因此,在销毁对象的时候要遍历对象中的属性并依次删除,避免内存泄露。
在严格模式下删除不可配置的属性会报语法错误,比如通过变量声明和函数声明穿件的全局对象的属性。在非严格模式下返回false,eg:
delete Object.prototype;//不能删除不可配置属性
var x = 1;
delete this.x;//不能删除全局对象的属性
function f(){}
delete this.f;//不能删除全局函数
(6).检测属性:
in运算符:如果对象的自有属性或继承属性中包含这个属性,则返回true。
hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性,对于继承属性,它将返回false。
propertyIsEnumerable()只检测自有属性,且这个属性的可枚举性为true的时候才返回true。
var o = {x:1,y:2};
"x" in o;//true
"z" in o;//false
"toString" in o;//true
var p = {x:1};
p.hasOwnProperty("x");//true
p.hasOwnProperty("toString");//false
(7).枚举属性:
for/in循环遍历对象中所有可枚举的属性(包括自身的和继承的),对象继承的内置方法是不可枚举的。
过滤继承的属性,跳过方法:
for(p in o) {
if(!o.hasOwnProperty(p)) continue;//跳过继承的属性
}
for(p in o) {
if(typeof(p) === "function") continue;//跳过方法
}
ECMAScript 5定义了两个枚举属性的函数:
Object.keys()方法返回一个数组,数组由对象可枚举的自有属性组成。Object.getOwnPropertyNames()返回对象所有的自有属性的名称(不仅仅是可枚举的属性)组成的数组。
javascript权威指南笔记--javascript语言核心(四)的更多相关文章
- javascript权威指南笔记--javascript语言核心(一)
1.javascript的数据类型分为两类:原始类型和对象类型. 原始类型包括字符串.数字.布尔值.null.undefined. 对象是属性的集合,每个对象都由“名/值”对构成.数组和函数是特殊的对 ...
- javascript权威指南笔记--javascript语言核心(三)
1.var用来声明一个或多个变量.全局变量是全局对象的属性,它无法通过delete删除. 如果var语句中的变量没有指定初始化表达式,那么这个变量的初始值为undefined. 变量声明语句会被提前到 ...
- javascript权威指南笔记--javascript语言核心(二)
1.函数作用域:在函数内声明的所有变量在函数体内始终是可见的.这意味着在变量声明之前甚至已经可用. *“声明提前”:javascript函数里声明的所有变量(但不涉及赋值)都被提前至函数的顶部. fu ...
- javascript权威指南笔记--javascript语言核心(六)
通过ECMAScript 3创建的属性都是可写的.可枚举的.可配置的. 在ECMAScript 5中,数据属性的4个特性分别是它的值.可写性.可枚举性.可配置性.存取器属性的特性是读取.写入.可枚举性 ...
- javascript权威指南笔记--javascript语言核心(五)--getter和setter属性
getter和setter属性: var p = { x:1.0, y:1.0, get r(){ return Math.sqrt(this.x*this.x + this.y * this.y); ...
- 1.语言概述-JavaScript权威指南笔记
上周三的时候交给老板目前的项目第一个迭代回顾会的总结.原本是以综述性的表述方式写的,交给他之后表示程序员不要长篇大论.总结要分为优点缺点期望等等块,每块列出条目,简明扼要的表达出来.这里也用这种风格. ...
- 2.语言概述-JavaScript权威指南笔记
上周三的时候交给老板目前的项目第一个迭代回顾会的总结.原本是以综述性的表述方式写的,交给他之后表示程序员不要长篇大论.总结要分为优点缺点期望等等块,每块列出条目,简明扼要的表达出来.这里也用这种风格. ...
- javascript权威指南笔记
最近每天工作之余看下js的细节部分,时间不是很多,所以看的进度也不会太快,写个博客监督自己每天都看下. 以前不知道的细节或者以前知道但是没注意过的地方都会记录下来,所以适合有一定基础的,不适合零基础新 ...
- 2.词法结构-JavaScript权威指南笔记
今天是第二章.所谓词法结构(lexical structure),就是写代码中最基本的东西,变量命名,注释,语句分隔等,这是抄书抄的... 1.字符集,必须是Unicode,反正Unicode是ASC ...
随机推荐
- 慎用MySQL replace语句
语法: REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,... ...
- struts2结果类型
struts2结果类型: 结果类型 描述 前request域属性是否丢失 1 dispatcher 用于与jsp整合的结果类型.默认结果类型. 2 chain Action链式处理结果类型.前一个Ac ...
- oracle 导出表结构和数据,使用plsql
比如说需要把A数据库里面的数据,导入到B数据库 准备工作:在B数据库中创建B数据库同名的的用户名和表空间,注意大小写必须一样. 1,导出表结构.A数据库里点击工具栏里的tools--Export Us ...
- Hive报错之java.sql.SQLException: Field 'IS_STOREDASSUBDIRECTORIES' doesn't have a default value
在创建表的时候报出如下错误: hive> create table if not exists testfile_table( > site string, > url string ...
- ecshop第一讲之安装
今天开始对Ectouch做一些研究,但是发现网上资源很少,而且官网对服务都需收费:并且提供的wiki.官方文档等都是空的,瞬间感觉,,,,后来开始海量搜索,最后发现只有论坛还有些东西可以看看,并对海量 ...
- PHP高级架构技术年度大盘点
2015年1月的最后一个周末,上海的冬季虽不如北方的雪窖冰天,但腊月的寒风也足以让人猫 在家中不愿出门.可是,在华美达酒店的一个会议室中,却人声鼎沸.春意融融,第三期商派技术沙龙正在火热进行,本期沙龙 ...
- 通达OA 同步中控考勤机 增强版
如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...
- SlickGrid example 3b: 支持撤销操作的编辑单元
不同类型的属性可以按不同的风格编辑. 每个编辑单元可以设置不同的验证方法. 历史编辑可以撤销. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTM ...
- Uva 1625,颜色的长度
类似于LCS的动态规划,指标函数的分解. 题目链接:https://uva.onlinejudge.org/external/16/1625.pdf 题目大意:两个颜色序列,将他们合并,合并的时候,每 ...
- linux lamp服务器安装配置
1 安装Apache服务器 yum -y install httpd httpd-devel 如何查看服务: systemctl | grep httpd 启动apache: service htt ...