JavaScript 中Object 对象⽅法超详细讲解举例说明仅此⼀篇
JavaScript 中Object 对象⽅法超详细讲解举例说明仅此⼀篇在JavaScript中,⼏乎所有的对象都是Object 类型的实例,它们都会从Object.prototype 继承属性和⽅法。Object  构造函数为给定值创建⼀个对象包装器。Object 构造函数,会根据给定的参数创建对象。如果给定值是 null  或 undefined ,将会创建并返回⼀个空对象如果传进去的是⼀个基本类型的值,则会构造其包装类型的对象
如果传进去的是引⽤类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引⽤地址Object.assign()
Object.assign() ⽅法⽤于将所有可枚举属性的值从⼀个或多个源对象分配到⽬标对象。它将返回⽬标对象。
javascript说明语法参数
target ⽬标对象。
sources
源对象。返回值
⽬标对象。
例⼦ate()
语法
参数Object.assign(target, ...sources)
1const  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 }
1
2
3
4
5
6
7
8
9
1
proto 新创建对象的原型对象。
propertiesObject 可选。需要传⼊⼀个对象,该对象的属性类型参照Object.defineProperties()的第⼆个参数。如果该参数被指定且不为 undefined ,该传⼊对象的⾃有可枚举属性(即其⾃⾝定义的属性,⽽不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。返回值
⼀个新对象,带着指定的原型对象和属性。
例⼦Object.values()
Object.values()⽅法返回⼀个给定对象⾃⾝的所有可枚举属性值的数组,值的顺序与使⽤循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
语法参数
obj 被返回可枚举属性值的对象。返回值
⼀个包含对象⾃⾝的所有可枚举属性值的数组。描述
Object.values()返回⼀个数组,其元素是在对象上到的可枚举属性值。属性的顺序与通过⼿动循环对象的属性值所给出的顺序相同。例⼦const  person = {  isHuman : false ,  printIntroduction : function () {    console .log (`My name is ${this .name }. Am I human? ${this .isHuman }`);  }};const  me = Object .create (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"
1
2
3
4
5
6
7
8
9
10
11
12
13
14Object.values(obj)
1
语法参数
obj 可以返回其可枚举属性的键值对的对象。返回值
例⼦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 = Object .create ({}, { 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 console .log (Object .values ('foo')); // ['f', 'o', 'o']
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
例⼦Object.freeze()
Object.freeze() ⽅法可以冻结⼀个对象。⼀个被冻结的对象再也不能被修改;冻结了⼀个对象则不能
向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结⼀个对象后该对象的原型也不能被修改。freeze() 返回和传⼊的参数相同的对象。
语法参数
obj 要被冻结的对象。console .log (Object .entries (obj )); // [ ['foo', 'bar'], ['baz', 42] ]// array like object const  obj = { 0: 'a', 1: 'b', 2: 'c' };console .log (Object .entries (obj )); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]// array like object with random key ordering const  anObj = { 100: 'a', 2: 'b', 7: 'c' };console .log (Object .entries (anObj )); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]// getFoo is property which isn't enumerable const  myObj = Object .create ({}, { getFoo : { value () { return  this .foo ; } } });myObj .foo = 'bar';console .log (Object .entries (myObj )); // [ ['foo', 'bar'] ]// non-object argument will be coerced to an object console .log (Object .entries ('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]// iterate through key-value gracefully const  obj = { a : 5, b : 7, c : 9 };for  (const  [key , value ] of  Object .entries (obj )) {  console .log (`${key } ${value }`); // "a 5", "b 7", "c 9"}// Or, using array extras Object .entries (obj ).forEach (([key , value ]) => { console .log (`${key } ${value }`); // "a 5", "b 7", "c 9"});2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const  object1 = {  a : 'somestring',  b : 42};for  (const  [key , value ] of  Object .entries (object1)) {  console .log (`${key }: ${value }`);}// expected output:// "a: somestring"// "b: 42"
1
2
3
4
5
6
7
8
9
10
11
12Object.freeze(obj)
1
返回值
被冻结的对象。例⼦
冻结对象
冻结数组var  obj = {  prop : function () {},  foo : 'bar'};// 新的属性会被添加, 已存在的属性可能// 会被修
改或移除obj .foo = 'baz';obj .lumpy = 'woof';delete  obj .prop ;// 作为参数传递的对象与返回的对象都被冻结// 所以不必保存返回的对象(因为两个对象全等)var  o = Object .freeze (obj );o === obj ; // true Object .isFrozen (obj ); // === true // 现在任何改变都会失效obj .foo = 'quux'; // 静默地不做任何事// 静默地不添加此属性obj .quaxxor = 'the friendly duck';// 在严格模式,如此⾏为将抛出 TypeErrors function  fail (){  'use strict';  obj .foo = 'sparky'; // throws a TypeError  delete  obj .quaxxor ; // 返回true ,因为quaxxor 属性从来未被添加  obj .sparky = 'arf'; // throws a TypeError }fail ();// 试图通过 Object.defineProperty 更改属性// 下⾯两个语句都会抛出 TypeError.Object .defineProperty (obj , 'ohai', { value : 17 });Object .defineProperty (obj , 'foo', { value : 'eit' });// 也不能更改原型// 下⾯两个语句都会抛出 TypeError.Object .setPrototypeOf (obj , { x : 20 })obj .__proto__ = { x : 20 }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。