标签:
内置对象:ECMAScript定义的对象或类,如数组、函数、正则表达式和日期。
宿主对象:由javascript解析器嵌入的宿主环境(Web浏览器)定义的。客户端javascript中表示网页结构的HTMLElement对象均是宿主对象。
自定义对象:运行中的javascript代码创建的对象
var book {
"main title": "javascript", //属性名里有空格
"sub-title": "The Definitive Guide", //属性名利有连字符
"for": "all", //属性名是保留字
author: {
firstname: "David",
lastname: "Flanagan"
}
}
对象直接量的每次运算都创建并初始化一个新的对象。
new后跟随构造函数
var o = new Object(); //创建空对象,和{}一样
var a = new Array(); //创建空数组,和[]一样
var d = new Date(); //创建表示当前时间的Date对象
var r = new RegExp(‘js‘); //创建可以进行模式匹配的RegExp对象
通过对象直接量创建的对象都具有同一个原型对象 通过new和构造函数创建的对象的原型就是构造函数prototype属性的值 Object.prototype 是没有原型的对象
创建一个新对象,第一个参数(必选)是它的原型,第二个参数(可选)描述它的属性
如果第一个参数传入null,则会创建没有原型的对象,不继承任何东西
如果要创建普通的空对象,需要传入 Object.prototype
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();
}
可以用 . 和 [] 获取属性值
. 的右侧必须是以属性名称命名的简单字符串
[] 内必须是计算结果为字符串的表达式
通过 . 访问属性名时,属性名用标识符表示,无法动态指定;
通过 [] 访问属性时,属性名通过字符串表示,可以修改和创建。
只有查询属性时才体会到继承,设置属性和继承无关。
delete 不能删除可配置性为false的变量,如通过变量声明和函数声明创建的全局对象的属性
in:如果对象的自有属性或继承属性包含这个属性则返回true
hasOwnProperty():检测给定的名字是否是对象的属性,对于继承属性返回false
propertyISEnumerable():检测到是自有属性且是可枚举性为true才返回true
!== 可以判断属性是否为undefined in 能区分不存在的属性和值为undefined的属性
var a = {x: undefined};
a.x !== undefined; //false 属性存在,但值为undefined
a.y !== undefined; //false
a.x in undefined; //true 属性存在
a.y in undefined; //false
for in 循环可以遍历对象的所有可枚举属性(包括自有属性和继承属性),把属性名复制给循环变量 Object.keys() 返回一个数组,由对象的可枚举的自由属性的名称组成
getOwnPropertyNames() 返回对象的所有自有属性名称
EMCAScript5属性值可以用getter和setter方法代替。由getter和setter定义的属性称作“存取器属性”
存取器属性定义为一个或两个和属性同名的函数,这个函数定义没有使用function关键字,而是get、set。
var o = {
data_prop: value,
get accessor_prop() {},
set accessor_prop(value) {},
};
值:value 可写性:writable 可枚举性:enumerable 可配置性:configurable
对象直接量创建的对象使用Object.prototype作为原型
new创建的对象使用构造函数的prototype属性作为原型
Object.create()创建的对象使用第一个参数作为原型
ECMAScirpt5通过 Object.getPrototypeOf()查询对象的原型,ECMASript3使用表达式o.constructor.prototype p.isPropertyOf(o) 检测p是否是o的原型
ECMAScirpt5,通过将对象传入Object.exExtensible()判断对象是否可扩展,将对象变为不可扩展后无法转换回可扩展。
Object.preventExtensions()将对象转换为不可扩展
Object.seal()除了能将对象设置为不可扩展,还可以将对象的所有自有属性设置为不可配置。
Object.freeze()除了将对象设置为不可扩展和属性设置为不可配置,还将它自有的数据设置为只读 都返回传入的对象
对象序列号:将对象的状态转换为字符串,也可以将字符串还原为对象。
ECMAScript提供JSON.stringify()和JSON.parse()来序列号和还原
toString()
返回表示调用这个方法的对象只的字符串,在需要将对象转换为字符串时都会调用
toLocaleString()
返回表示这个对象的本地化字符串
toJSON()
valueOf()
需要将对象转换为某种原始值才会调用,尤其是转换为数字
/*将p的可枚举属性复制到o并返回o *o中的同名属性被覆盖 */ function entend(o, p) { for (prop in p) { o[prop] = p[prop]; } return o; } /*将p的可枚举属性复制到o并返回o *o中的同名属性不受影响 */ function merge(o, p) { for (prop in p) { if (o.hasOwnProperty[prop]) continue; o[prop] = p[prop]; } return o; } /* *如果o中的属性在p中没有同名属性,则从o删除该属性 */ function restrict(o,p) { for (prop in o) { if (!p.hasOwnProperty[prop]) delete o[prop]; } return o; } /* *如果o中的属性在p中存在,则从o删除该属性 */ function subtract(o, p) { for (prop in p) { delete o[prop]; } return o; } /* *返回一个新对象,同时有o和p的属性 */ function union(o, p) { return extend(extent({}, o), p); }
标签:
原文地址:http://www.cnblogs.com/surahe/p/4355536.html