JS Object静的方法解説
20108 ワード
一、Object.assign()
複数のオブジェクトのエニュメレート・プロパティーを対象オブジェクトにコピーし、割り当て後のオブジェクトに戻ります.
Object.assign(targt,…sources) target:ターゲット ...sources:ソースオブジェクト テストは以下の通りです
クラスのプロトタイプのオブジェクトを取得し、パラメータタイプのプロトタイプのオブジェクトを返します.クラス継承に使用できます.
Object.creat(proto[propertiesObject]) proto:クラス原型 テストは以下の通りです
オブジェクトに属性を定義します.属性が存在する場合は、既存の属性を新規に定義して更新します.この属性が存在しない場合は、属性を追加します.
Object.defineProperties(obj,props) obj:属性が付加されたオブジェクト props:属性オブジェクトを追加または更新する テストは以下の通りです
しかし、Object.defineProperties()によって定義された新しい属性newProp 2はデフォルトでは列挙できないので、JSON.stingify(obj)においては、この新規定義の属性をプロビジョニングしていません.
以上の結果から結論が得られます.
JSON.strigify()JSONObjectには、そのオブジェクトの列挙可能な属性のみがプロビジョニングされます.
四、Object.defineProperty()
オブジェクトに新しい属性を定義するか、オブジェクトの既存の属性を変更し、オブジェクトを返します.
Object.defineProperty(obj,prop,descriptor) obj:属性が付加されたオブジェクト prop:属性名 descriptor:属性記述 テストは以下の通りです
五、Object.entries()
検索対象上のすべてのエニュメレート・属性を巡回して、結果は2次元配列
Object.entries(obj) obj:遍歴されたオブジェクト テストは以下の通りです
オブジェクトの属性を凍結し、オブジェクトとそのプロトタイプに追加、削除、属性の更新を阻止します.凍結されたオブジェクトを返します.
Object.freeze(obj) obj:凍結されたオブジェクト テストは以下の通りです
七、Object.getOwn PropertyDescriptor()
オブジェクト指定の名称の直接属性の記述情報(オブジェクトに直接的な属性であって、プロトタイプチェーン上の属性ではない)を取得し、存在するとその属性の記述情報を返し、存在しない場合はundefinedに戻ります.
Object.getOwn PropertyDescriptor(Obj,prop) obj:ターゲット prop:取得された属性名 テストは以下の通りです
オブジェクトの直接属性に関する記述情報を取得します.
Object.getOwn PropertyDescriptors(Obj) obj:ターゲット テストは以下の通りです
オブジェクトの直接属性の属性名を取得します.属性名文字列配列を返します.
Object.getOwn PropertyNames(Obj) obj:ターゲット テストは以下の通りです
オブジェクト上のすべての
Object.getOwn PropertySymbors(Obj) obj:ターゲット テストは以下の通りです
オブジェクトのプロトタイプオブジェクトを取得すると、その機能はobj.uプロト同じです
Object.get ProttypeOf(Obj) obj:ターゲット テストは以下の通りです
2つのオブジェクトが同じかどうかを比較し、値タイプのオブジェクトの比較値が等しいかを参照タイプのオブジェクトがメモリアドレスと同じかを比較します.
Object.is(value 1,value 2) value 1:最初の比較対象 value 2:第二の比較対象 テストは以下の通りです
オブジェクトのエニュメレート・プロパティー配列を返します.
Object.keys(obj) obj:ターゲット テストは以下の通りです
複数のオブジェクトのエニュメレート・プロパティーを対象オブジェクトにコピーし、割り当て後のオブジェクトに戻ります.
Object.assign(targt,…sources)
var source1 = {
name1: 'source1',
age1: 18
};
var source2 = {
name2: 'source2',
age2: 19
};
var target = Object.assign({name: 'target'}, source1, source2);
console.info(JSON.stringify(target));
// :
{
"name":"target",
"name1":"source1",
"age1":18,
"name2":"source2",
"age2":19
}
二、Object.creat()クラスのプロトタイプのオブジェクトを取得し、パラメータタイプのプロトタイプのオブジェクトを返します.クラス継承に使用できます.
Object.creat(proto[propertiesObject])
//
function Super1Class() {
this.name = 'Super1Class';
}
Super1Class.prototype = {
super1Method: function() {
console.info('My name is ' + this.name);
}
};
//
function MyClass() {
this.name = 'MyClass';
}
MyClass.prototype = Object.create(Super1Class.prototype);
//
// MyClass.prototype = new Super1Class();
var myClass = new MyClass();
console.info(myClass instanceof Super1Class);
// true
console.info(myClass instanceof MyClass);
// true
console.info(myClass.super1Method());
// My name is MyClass
三、Object.defineProperties()オブジェクトに属性を定義します.属性が存在する場合は、既存の属性を新規に定義して更新します.この属性が存在しない場合は、属性を追加します.
Object.defineProperties(obj,props)
var obj = {
name: 'obj'
};
Object.defineProperties(obj, {
name: {
value: 'newName',
writable: true
},
newProp1: {
value: 'newProp1',
writable: true,
enumerable: true
},
newProp2: {
value: 'newProp2',
writable: true
}
});
console.info(JSON.stringify(obj));
//
{
"name":"newName",
"newProp1":"newProp1"
}
以上の出力結果から、Object.defineProperties()に定義されたカバー属性nameは、古い属性nameの値とそのwritable属性を更新しただけで、name属性のエニュメレーション性を更新していないことが分かりました.しかし、Object.defineProperties()によって定義された新しい属性newProp 2はデフォルトでは列挙できないので、JSON.stingify(obj)においては、この新規定義の属性をプロビジョニングしていません.
以上の結果から結論が得られます.
JSON.strigify()JSONObjectには、そのオブジェクトの列挙可能な属性のみがプロビジョニングされます.
四、Object.defineProperty()
オブジェクトに新しい属性を定義するか、オブジェクトの既存の属性を変更し、オブジェクトを返します.
Object.defineProperty(obj,prop,descriptor)
var obj = {};
var mame = 'obj';
Object.defineProperty(obj, 'name', {
configurable: true,
enumerable: true,
get: function() {
console.info('get name .');
return mame;
},
set: function(newName) {
console.info('set new name is ' + newName);
mame = newName;
}
});
console.info(JSON.stringify(obj));
obj.name = 'xxx';
console.info(JSON.stringify(obj));
// :
get name .
{"name":"obj"}
set new name is xxx
get name .
{"name":"xxx"}
以上のテスト結果から、私たちはプログレッシブオブジェクトで属性のgetメソッドを呼び出すことができます.オブジェクト属性に値を割り当てるときは、属性のセット方法を呼び出すことができます.五、Object.entries()
検索対象上のすべてのエニュメレート・属性を巡回して、結果は2次元配列
[['key1', 'value1'], ['key2', 'value2'], ......]
である.Object.entries(obj)
var obj = {
name: 'obj',
age: 18
};
var kvs = Object.entries(obj);
console.info(JSON.stringify(kvs));
// [["name","obj"],["age",18]]
for(let [key, value] of Object.entries(obj)) {
console.info(key + ' --> ' + value);
// name --> obj, age --> 18
}
Object.entries(obj).forEach(function([key, value]) {
console.info(key + ' --> ' + value);
// name --> obj, age --> 18
});
for(let key in obj) {
console.info('key --> ' + key);
// key --> name, key --> age
}
六、Object.freeze()オブジェクトの属性を凍結し、オブジェクトとそのプロトタイプに追加、削除、属性の更新を阻止します.凍結されたオブジェクトを返します.
Object.freeze(obj)
'use strict'
var obj = {
name: 'obj'
};
obj['age'] = 18;
obj.name = 'newName';
console.info(JSON.stringify(obj));
// {"name":"newName","age":18}
var o = Object.freeze(obj);
console.info(o === obj);
// true
//
obj['sex'] = 'man';
// Uncaught TypeError: Cannot add property sex, object is not extensible
obj.name = 'updateName';
// Uncaught TypeError: Cannot assign to read only property 'name' of object '#
console.info(JSON.stringify(obj));
// {"name":"newName","age":18}
凍結されたオブジェクトの属性はすべて読み取り可能です.七、Object.getOwn PropertyDescriptor()
オブジェクト指定の名称の直接属性の記述情報(オブジェクトに直接的な属性であって、プロトタイプチェーン上の属性ではない)を取得し、存在するとその属性の記述情報を返し、存在しない場合はundefinedに戻ります.
Object.getOwn PropertyDescriptor(Obj,prop)
function Obj() {
this.name = 'obj';
}
Obj.prototype = {
age: 18,
sex: function() {
return 'man';
}
};
var obj = new Obj();
var descName = Object.getOwnPropertyDescriptor(obj, 'name');
console.info(JSON.stringify(descName));
// {"value":"obj","writable":true,"enumerable":true,"configurable":true}
var descAge = Object.getOwnPropertyDescriptor(obj, 'age');
console.info(JSON.stringify(descAge));
// undefined
var descSex = Object.getOwnPropertyDescriptor(obj, 'sex');
console.info(JSON.stringify(descSex));
// undefined
八、Object.getOwn PropertyDescriptors()オブジェクトの直接属性に関する記述情報を取得します.
Object.getOwn PropertyDescriptors(Obj)
function Obj() {
this.name = 'obj';
this.age = 18;
}
Obj.prototype = {
sex: function() {
return 'man';
}
};
var obj = new Obj();
var descObj = Object.getOwnPropertyDescriptors(obj);
console.info(JSON.stringify(descObj));
//
{"name":
{
"value":"obj",
"writable":true,
"enumerable":true,
"configurable":true
},
"age":{
"value":18,
"writable":true,
"enumerable":true,
"configurable":true
}
}
九、Object.getOwn PropertyNames()オブジェクトの直接属性の属性名を取得します.属性名文字列配列を返します.
Object.getOwn PropertyNames(Obj)
function Obj() {
this.name = 'obj';
this.age = 18;
}
Obj.prototype = {
sex: function() {
return 'man';
}
};
var obj = new Obj();
var objProps = Object.getOwnPropertyNames(obj);
console.info(JSON.stringify(objProps));
// ["name","age"]
十、Object.getOwn PropertySymbors()オブジェクト上のすべての
Symbol
タイプの属性リストを取得します.Object.getOwn PropertySymbors(Obj)
const obj = {
name: 'obj'
};
const name = Symbol('name');
obj[name] = ' Symbol name ';
var objSymbolProps = Object.getOwnPropertySymbols(obj);
console.info(objSymbolProps);
// [Symbol(name)]
console.info(obj[objSymbolProps[0]]);
// Symbol name
十一、Object.get ProttypeOf()オブジェクトのプロトタイプオブジェクトを取得すると、その機能はobj.uプロト同じです
Object.get ProttypeOf(Obj)
function MyClass() {}
MyClass.prototype = {
name: 'MyClass'
};
var obj = Object.create(MyClass.prototype);
console.info(Object.getPrototypeOf(obj) === MyClass.prototype);
// true
console.info(obj.__proto__ === MyClass.prototype);
// true
十二、Object.is()2つのオブジェクトが同じかどうかを比較し、値タイプのオブジェクトの比較値が等しいかを参照タイプのオブジェクトがメモリアドレスと同じかを比較します.
Object.is(value 1,value 2)
Object.is('foo', 'foo'); // true
Object.is(window, window); // true
Object.is('foo', 'bar'); // false
Object.is([], []); // false
Object.is({}, {}); // false
var obj1 = {
name: 'obj'
};
var obj2 = {
name: 'obj'
};
Object.is(obj1, obj1); // true
Object.is(obj1, obj2); // false
Object.is(null, null); // true
Object.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0/0); // true
十三、Object.keys()オブジェクトのエニュメレート・プロパティー配列を返します.
Object.keys(obj)
var arr = ['a', 'b', 'c'];
console.info(Object.keys(arr));
// ["0", "1", "2"]
var obj = { 1: 'a', 0: 'b', 2: 'c' };
console.log(Object.keys(obj));
// ["0", "1", "2"]
以上の結果は、Object.keys(obj)が属性名を並べ替えることも見られます.