首页 > 代码库 > ES5 方法学习
ES5 方法学习
Object
1. Object.getPrototypeOf(o)
获取对象的prototype对象。等价于以前的o.__proto__
var o = {}; Object.getPrototypeOf(o) === o.__proto__; // true
2. Object.getOwnPropertyNames(o)
获取自有属性名列表。结果列表将不包含原型链上的属性。
var o = { bar: 42, a: 2, b: 3}; Object.getOwnPropertyNames(o); // ["bar", "a", "b"] var o = {} o.__proto__.b = 2; Object.getPrototypeOf(o).c = 3; // 和上面的一句等价 Object.getOwnPropertyNames(o); // []
3. Object.keys
返回对象o的所有可枚举(enumerable)属性的名称。
和 Object.getOwnPropertyNames 区别如下:
var o = {}; // 属性 b 不可枚举 Object.defineProperty(o, ‘b‘, { value: 1 }); o.b; // 1 Object.keys(o); // [] Object.getOwnPropertyNames(o); // ["b"]
4. Object.create(proto[, propertiesObject])
The Object.create() method creates a new object with the specified prototype object and properties.
第1个参数是该对象的 prototype, 第2个参数和 Object.defineProperties 第2个参数类似
详见链接;
5. Object.assign
有点像 $.extend 方法, 但是是浅复制
// 复制 var o = {a: 1}; var copy = Object.assign({}, o); copy.a; // 1 copy.a = 2; copy.a; // 2 // 复制 var o1 = {a: 1}; var o2 = {b: 2}; var copy = Object.assign({}, o1, o2); copy.a; // 1 copy.b; // 2 // 浅复制 var o = {a: {b: 1}}; var copy = Object.assign({}, o); copy.a.b; // 1 copy.a.b = 2; o.a.b; // 2 // 只复制 可枚举的 var obj = Object.create({ foo: 1 }, { // foo is on obj‘s prototype chain. bar: { value: 2 // bar is a non-enumerable property. }, baz: { value: 3, enumerable: true // baz is an own enumerable property. } }); var copy = Object.assign({}, obj); copy.bar; // undefined; copy.baz; // 3
5. Object.prototype.isPrototypeOf(v)
检查对象是否是位于给定对象v的原型链上。
var o = {}; var q = Object.create(o); o.isPrototypeOf(q);
6. Object.defineProperty(obj, prop, descriptor)
obj 对象, prop 属性名, descriptor 属性值和描述
详见链接;
7. Object.defineProperties(obj, props)
根据对象描述props来定义对象o,通常props包含多个属性的定义。
比 Object.defineProperty 更实用, 因为可以定义多个属性
var obj = {}; Object.defineProperties(obj, { ‘property1‘: { value: true, writable: true }, ‘property2‘: { value: ‘Hello‘, writable: false } // etc. etc. });
8. Object.getOwnPropertyDescriptor(o,p)
获取对象描述
The Object.getOwnPropertyDescriptor() method returns a property descriptor for an own property (that is, one directly present on an object and not in the object‘s prototype chain) of a given object.
var o = { get foo() { return 17; } }; var d = Object.getOwnPropertyDescriptor(o, ‘foo‘); // d is { // configurable: true, // enumerable: true, // get: /*the getter function*/, // set: undefined // } var o = { bar: 42 }; var d = Object.getOwnPropertyDescriptor(o, ‘bar‘); // d is { // configurable: true, // enumerable: true, // value: 42, // writable: true // }
9. Object.seal(o)
seal 单词的意思是
n. 印章,海豹
v. 封闭,密封
The Object.seal() method seals an object, preventing new properties from being added to it and marking all existing properties as non-configurable. Values of present properties can still be changed as long as they are writable.
设置以后不可添加新属性和修改已有属性的特性,但是可以修改已有的属性
var o = {a: 1, b:2}; var obj = Object.seal(o); obj === o; // true, 注意它们是全等的 Object.isSealed(obj); // true Object.isFrozen(obj); // false o.c = 222; o.c; // undefined o.a = 2; o.a; // 2 Object.defineProperty(obj, ‘ohai‘, { value: 17 }); // Uncaught TypeError: Cannot define property:ohai, object is not extensible. Object.defineProperty(obj, ‘a‘, { value: 17 }); o.a; // 17 Object.defineProperty(obj, ‘a‘, { writable: true }); // Uncaught TypeError: Cannot redefine property: a // 这样不会报错, 因为没有修改 Object.defineProperty(obj, ‘a‘, { writable: false });
10. Object.isSealed(o);
判断一个对象是否sealed
var obj = {}; Object.defineProperties(obj, { ‘property1‘: { configurable: false } }); Object.preventExtensions(obj); Object.isSealed(obj); // true
11. Object.freeze(o)
和 Object.seal 限制一样,并且还不能修改原来的属性
var o = {a: 1, b:2}; var obj = Object.freeze(o); obj === o; // true, 注意它们是全等的 Object.isSealed(obj); // true Object.isFrozen(obj); // true obj.a = 22; obj.a; // 1 obj.c = 22; obj.c; // undefined; Object.isFrozen(obj); // true Object.defineProperty(obj, ‘a‘, { writable: true }); // Uncaught TypeError: Cannot redefine property: a
12. Object.isFrozen(o)
判断一个对象是否 frozen
var obj = {}; Object.defineProperties(obj, { ‘property1‘: { configurable: false, writable: false } }); Object.preventExtensions(obj); Object.isFrozen(obj); // true
13. Object.preventExtensions(o)
将对象置为不可扩展。
var obj = {}; var o = Object.preventExtensions(obj); o === obj; o.a = 1; o.a; // undefined Object.isExtensible(o); // true
14. Object.isExtensible(o)
判断一个对象是否可扩展, 默认为 false
15. Object.prototype.propertyIsEnumerable(p)
检查一个对象上的属性p是否可枚举。
var o = {} Object.defineProperties(o, { a: { enumerable: false }, b: { enumerable: true } }); o.propertyIsEnumerable(‘a‘); // false o.propertyIsEnumerable(‘b‘); // true
16. Object.getOwnPropertySymbols
待描述;
17. Object.is
判断2个值是否相等
NaN == NaN; // false NaN === NaN; // false Object.is(NaN, NaN); // true // Special Cases Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0/0); // true
Array
详情请点链接
String
1. String.prototpye.trim
去掉字符串两头的空白符和换行符。
2. 字符订阅
//property access on strings "abc"[1] === "b"; // 相当于 "abc".charAt(1)
Function
Function.prototype.bind(thisTarget, arg1,…argn)
JSON
JSON.parse(text)
JSON.stringify(obj)
Date
1. Date.now
获取当前时间距1970.1.1 00:00:00的毫秒数。
Date.now(); //1492351123908
2. Date.prototype.toISOString
根据ISO860123生成时间字符串。
(new Date).toISOString(); // "2017-04-16T09:01:23.366Z"
参考链接:
http://pij.robinqu.me/JavaScript_Core/ECMAScript/es5.html
MDN Object
ES5 方法学习