ecscript5学习笔记
ECMAScript 定义一组内置对象 (built-in objects)。这些内置对象包括
- 全局对象 (global object) ;
- Object 对象 ;
- Function 对象 ;
- Array 对象 ;
- String 对象 ;
- Boolean 对象 ;
- Number 对象 ;
- Math 对象 ;
- Date 对象 ;
- RegExp 对象 ;
- JSON 对象;
- Error 对象: Error ,EvalError ,RangeError ,ReferenceError ,SyntaxError ,TypeError ,URIError 。
ECMAScript 中还定义一组内置运算符 (operators)。
- 一元运算符 ;
- 乘法运算符 ;
- 加法运算符 ;
- 按位移位运算符 ;
- 关系运算符 ;
- 相等运算符 ;
- 二进制位运算符 ;
- 二进制逻辑运算符 ;
- 赋值运算符 ;
- 逗号运算符。
Object 常用方法
-
Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。
参考:http://hao.jser.com/archive/8062/
实例
var acount = Object.create(Object.prototype, {
type: {
value: '建设银行'
// 布尔值,设置属性是否可以被枚举,默认属性值为false(不能被枚举)
// 值为true 可以进行循环遍历
, enumerable: false
// 布尔值,设置属性是否可以被删除,默认属性值为false(不能被删除)
// 值为true delete acount.type 生效
, configurable: false
//布尔值,设置属性是否可以被重写,默认属性值为false(不能被重写)
//值为true acount.type = '人民银行'; 生效
, writable: false
}
,
number: {
get: function () {
if ((typeof number) === "undefined") {
//说明没有设置number
return "您还没有开通账户!请联系前台!";
}
return "您的账户号码是:" + number;
},
set: function (num) {
number = num;
if (this.cTime === 0) {
console.log("账户开通成功!");
this.cTime++;
} else {
console.log("账户号码已经被修改!");
}
}
},
cTime: {
value: 0,
writable: true
}
});
acount.type; // "建设银行"
acount.number; // "您还没有开通账户!请联系前台!"
acount.number = "610XXXXXXXXXX21";
// "账户开通成功!"
acount.number; // "您的账户号码是:610XXXXXXXXXX21"
acount.number = "610XXXXXXXXXX88";
// "账户号码已经被修改!"
acount.number; // "您的账户号码是:610XXXXXXXXXX88"
-
Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
更多详情 -
Object.defineProperties() 方法在一个对象上添加或修改一个或者多个自有属性,并返回该对象。
更多详情 -
Object.getPrototypeOf() 方法返回指定对象的原型(也就是该对象内部属性[[Prototype]]的值)。
更多详情 -
Object.getOwnPropertyDescriptor() 返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
更多详情 -
Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。
更多详情 -
Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。其和
Object.keys
的区别就是能够获取自身的全部属性,包括不可枚举属性。 -
Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。更多详情
-
Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。更多详情
-
Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。
更多详情 -
Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。
更多详情 -
Object.isSealed() 方法判断一个对象是否是密封的(sealed)。
更多详情 -
Object.freeze() 方法可以冻结一个对象。冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。
-
Object.isFrozen() 方法判断一个对象是否被冻结(frozen)。
更多详情 -
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。更多详情
-
Object.getOwnPropertySymbols() 方法会返回一个数组,该数组包含了指定对象自身的(非继承的)所有 symbol 属性键。更多详情
-
Object.is() 方法用来判断两个值是否是同一个值。Object.is与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。
更多详情 -
Object.setPrototypeOf(obj, prototype) 将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性)。更多详情
-
Object.prototype 上的方法,都是实例方法,必须在对象实例上调用。
- hasOwnProperty
- isPrototypeOf⑤
- propertyIsEnumerable⑤
-
__proto__
⑥ - hasOwnProperty
hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。
更多详情
-
isPrototypeOf() 方法测试一个对象是否存在于另一个对象的原型链上。
更多详情 -
propertyIsEnumerable() 方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。更多详情
-
__proto__
一个对象的__proto__
属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.__proto__
的值就是null).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型。 如果需要访问一个对象的原型,应该使用方法Object.getPrototypeOf。__proto__
属性已经被添加在了ES6草案 §B.3.1中。
更多详情
参考
http://yanhaijing.com/javascript/2015/05/08/member-of-object/