js对象⽅法⼤全
JavaScript中Object构造函数的⽅法
Object构造函数的⽅法节
Object.assign()
通过复制⼀个或多个对象来创建⼀个新的对象。
使⽤指定的原型对象和属性创建⼀个新对象。
Object.defineProperty()
给对象添加⼀个属性并指定该属性的配置。
Object.defineProperties()
给对象添加多个属性并分别指定它们的配置。
返回给定对象⾃⾝可枚举属性的[key, value]数组。
Object.freeze()
冻结对象:其他代码不能删除或更改任何属性。
Object.is()
⽐较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。
Object.isExtensible()
判断对象是否可扩展。
Object.isFrozen()
判断对象是否已经冻结。
Object.isSealed()
判断对象是否已经密封。
Object.keys()
返回⼀个包含所有给定对象⾃⾝可枚举属性名称的数组。
Object.values()
返回给定对象⾃⾝可枚举值的数组。
1、Object.assign() ⽅法⽤于将所有可枚举属性的值从⼀个或多个源对象复制到⽬标对象。它将返回⽬标对象。const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
2、ate()⽅法创建⼀个新对象,使⽤现有的对象来提供新创建的对象的__proto__。
const person = {
isHuman: false,
printIntroduction: function () {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
const me = ate(person);
me.name = "Matthew"; // "name" is a property set on "me", but not on "person"
me.isHuman = true; // inherited properties can be overwritten
me.printIntroduction();
// expected output: "My name is Matthew. Am I human? true"
3、Object.defineProperties() ⽅法直接在⼀个对象上定义新的属性或修改现有属性,并返回该对象。
语法 Object.defineProperties(obj, props) obj在其上定义或修改属性的对象。props要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅Object.defineProperty())。描述符具有以下键:configurabletrue 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 falseenumerabletrue 当且仅当在枚举相应对象上的属性时该属性显现。默认为 falsevalue与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为undefined.writabletrue当且仅当与该属性相关联的值可以⽤assignment operator改变时。默认为 falseget作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被⽤作属性的值。默认为 undefinedset作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。默认为 undefined返回值节传递给函数的对象。
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
// etc. etc.
});
4、Object.defineProperty() ⽅法会直接在⼀个对象上定义⼀个新属性,或者修改⼀个对象的现有属性,并返回这个对象。
语法 Object.defineProperty(obj, prop, descriptor) obj要在其上定义属性的对象。prop要定义或修改的属性的名称。descriptor将被定义或修改的属性描述符。返回值节被传递给函数的对象。在ES6中,由于 Symbol类型的特殊性,⽤Symbol类型的值来做对象的key与常规的定义或修改不同,⽽Object.defineProperty 是定义key为Symbol的属性的⽅法之⼀。
5、ies()⽅法返回⼀个给定对象⾃⾝可枚举属性的键值对数组,其排列与使⽤ in 循环遍历该对象时返回的顺序⼀致(区别在于 for-in 循环也枚举原型链中的属性)
const object1 = { foo: 'bar', baz: 42 };
console.ies(object1)[1]);
// expected output: Array ["baz", 42]
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.ies(object2)[2]);
// expected output: Array ["2", "c"]
const result = ies(object2).sort((a, b) => a - b);
console.ies(result)[1]);
// expected output: Array ["1", Array ["1", "b"]]
6、Object.freeze() ⽅法可以冻结⼀个对象。⼀个被冻结的对象再也不能被修改;冻结了⼀个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结⼀个对象后该对象的原型也不能被修改。freeze() 返回和传⼊的参数相同的对象。
const object1 = {
property1: 42
};
const object2 = Object.freeze(object1);
object2.property1 = 33;
// Throws an error in strict mode
console命令大全
console.log(object2.property1);
// expected output: 42
7、Object.fromEntries() 把键值对列表转换为⼀个对象。
Map 转化为 Object
通过 Object.fromEntries,可以将 Map 转化为 Object:
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
const obj = Object.fromEntries(map);
console.log(obj); // { foo: "bar", baz: 42 }
Array 转化为 Object
通过 Object.fromEntries,可以将 Array 转化为 Object:
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
const obj = Object.fromEntries(arr);
console.log(obj); // { 0: "a", 1: "b", 2: "c" }
对象转换为Object
Object.fromEntries 是 ies() 的反转函数,借⽤ array manipulation methods 可以转换对象,如下:
const object1 = { a: 1, b: 2, c: 3 };
const object2 = Object.fromEntries(
.map(([ key, val ]) => [ key, val * 2 ])
);
console.log(object2);
// { a: 2, b: 4, c: 6 }
8、Object.is() ⽅法判断两个值是否是相同的值
Object.is('foo', 'foo'); // true
Object.is(window, window); // true
Object.is('foo', 'bar'); // false
Object.is([], []); // false
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo); // true
Object.is(foo, bar); // false
Object.is(null, null); // true
// 特例
Object.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0/0); // true
9、Object.isFrozen()⽅法判断⼀个对象是否被冻结
// 使⽤Object.freeze是冻结⼀个对象最⽅便的⽅法.
var frozen = { 1: 81 };
Object.isFrozen(frozen) //=== false
Object.freeze(frozen);
Object.isFrozen(frozen) //=== true
// ⼀个冻结对象也是⼀个密封对象.
Object.isSealed(frozen) //=== true
/
/ 当然,更是⼀个不可扩展的对象.
Object.isExtensible(frozen) //=== false
在 ES5 中,如果参数不是⼀个对象类型,将抛出⼀个TypeError异常。在 ES2015 中,⾮对象参数将被视为⼀个冻结的普通对象,因此会返回true。
Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)
Object.isFrozen(1);
// true (ES2015 code)
10、Object.keys() ⽅法会返回⼀个由⼀个给定对象的⾃⾝可枚举属性组成的数组,数组中属性名的排列顺序和使⽤ in 循环遍历该对象时返回的顺序⼀致。
// simple array
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
// array like object with random key ordering
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']
// getFoo is a property which isn't enumerable
var myObj = ate({}, {
getFoo: {
value: function () { return this.foo; }
}
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']
11、Object.values()⽅法返回⼀个给定对象⾃⾝的所有可枚举属性值的数组,值的顺序与使⽤in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
// array like object with random key ordering
// when we use numeric keys, the value returned in a numerical order according to the keys
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']
// getFoo is property which isn't enumerable
var my_obj = ate({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = 'bar';
console.log(Object.values(my_obj)); // ['bar']
// non-object argument will be coerced to an object
————————————————
版权声明:本⽂为CSDN博主「⼩飞侠-2」的原创⽂章,遵循CC 4.0 BY-SA版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/qq_26562641/article/details/88575516
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论