js对象方法大全
JavaScript中Object构造函数的方法
Object构造函数的方法节
通过复制一个或多个对象来创建一个新的对象。
使用指定的原型对象和属性创建一个新对象。
给对象添加一个属性并指定该属性的配置。
给对象添加多个属性并分别指定它们的配置。
返回给定对象自身可枚举属性的[key, value]数组。
冻结对象:其他代码不能删除或更改任何属性。
比较两个值是否相同。所有 NaN 值都相等(这与==和===不同)。
判断对象是否可扩展。
判断对象是否已经冻结。
判断对象是否已经密封。
返回一个包含所有给定对象自身可枚举属性名称的数组。
返回给定对象自身可枚举值的数组。
1、Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
1
2 const target = { a: 1, b: 2 };
3
4 const source = { b: 4, c: 5 };
5
6 const returnedTarget = Object.assign(target, source);
7
8 console.log(target);
9
10 // expected output: Object { a: 1, b: 4, c: 5 }
11
12 console.log(returnedTarget);
13
14 // expected output: Object { a: 1, b: 4, c: 5 }
2、Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
1
2 const person = {
3
4 isHuman: false,
5
6 printIntroduction: function () {
7
8 console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
9
10 }
11
12 };
13
14
15
16 const me = Object.create(person);
17
18
19
20 me.name = "Matthew"; // "name" is a property set on "me", but not on "person"
21
22 me.isHuman = true; // inherited properties can be overwritten
23
24
25
26 me.printIntroduction();
27
28 // 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返回值节 传递给函数的对象。
1
2 var obj = {};
3
4 Object.defineProperties(obj, {
5
6 'property1': {
7
8 value: true,
9
10 writable: true
11
12 },
13
14 'property2': {
15
16 value: 'Hello',
17
18 writable: false
19
20 }
21
22 // etc. etc.
23
24 });
4、Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
语法 Object.defineProperty(obj, prop, descriptor) obj要在其上定义属性的对象。prop要定义或修改的属性的名称。descriptor将被定义或修改的属性描述符。返回值节 被传递给函数的对象。在ES6中,由于 Symbol类型的特殊性,用Symbol类型的值来做对象的key与常规的定义或修改不同,而Object.defineProperty 是定义key为Symbol的属性的方法之一。
5、Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)
const object1 = { foo: 'bar', baz: 42 };
console.log(Object.entries(object1)[1]);
// expected output: Array ["baz", 42]
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(object2)[2]);
// expected output: Array ["2", "c"]
const result = Object.entries(object2).sort((a, b) => a - b);
console.log(Object.entries(result)[1]);
// expected output: Array ["1", Array ["1", "b"]]
6、Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
1
2 const object1 = {
3
4 property1: 42
5
6 };
7
8
9
10 const object2 = Object.freeze(object1);
11
12
13
14 object2.property1 = 33;
15
16 // Throws an error in strict mode
17
18
19
20 console.log(object2.property1);
21
22 // 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 是 Object.entries() 的反转函数, 借用 array manipulation methods 可以转换对象,如下:
const object1 = { a: 1, b: 2, c: 3 };
const object2 = Object.fromEntries(
Object.entries(object1)
.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()方法判断一个对象是否被冻结
1
2 // 使用Object.freeze是冻结一个对象最方便的方法.
3
4 var frozen = { 1: 81 };
5
6 Object.isFrozen(frozen) //=== false
7
8 Object.freeze(frozen);
9
10 Object.isFrozen(frozen) //=== true
11
12
13
14 // 一个冻结对象也是一个密封对象.
15
16 Object.isSealed(frozen) //=== true
17
18
19
20 // 当然,更是一个不可扩展的对象.
21
22 Object.isExtensible(frozen) //=== false
23
24 在 ES5 中,如果参数不是一个对象类型,将抛出一个TypeError异常。在 ES2015 中,非对象参数将被视为一个冻结的普通对象,因此会返回true。
25
26
27
28 Object.isFrozen(1);
29
30 // TypeError: 1 is not an object (ES5 code)
31
32
33
34 Object.isFrozen(1);
35
36 // true (ES2015 code)
10、Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...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 = Object.create({}, {
getFoo: {
value: function () { return this.foo; }
}
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']
11、Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
1
2 var obj = { foo: 'bar', baz: 42 };
3
4 console.log(Object.values(obj)); // ['bar', 42]
5
6
7
8 // array like object
9
10 var obj = { 0: 'a', 1: 'b', 2: 'c' };
11
12 console.log(Object.values(obj)); // ['a', 'b', 'c']
13
14
15
16 // array like object with random key ordering
17
18 // when we use numeric keys, the value returned in a numerical order according to the keys
19
20 var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
21
22 console.log(Object.values(an_obj)); // ['b', 'c', 'a']
23
24
25
26 // getFoo is property which isn't enumerable
27
28 var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
29
30 my_obj.foo = 'bar';
31
32 console.log(Object.values(my_obj)); // ['bar']
33
34
35
36 // non-object argument will be coerced to an object
37
38 console.log(Object.values('foo')); // ['f', 'o', 'o']
js对象方法大全的更多相关文章
- 转载收藏(js数组方法大全)
js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...
- js数组方法大全(下)
# js数组方法大全(下) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() ...
- js数组方法大全(上)
# js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...
- json转js对象方法,JS对象转JSON方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 小程序-调用公共js对象方法/ app.js
在小程序中,如果在子页面想调用共公js的方法,需先在子页面js中先实例化app:具体过程如下 子页面js: 1 2 3 4 5 6 7 8 //调用公共js对象以便调用其方法 var app = ge ...
- 学习zepto.js(对象方法)[4]
今天说说那一套获取元素集合的一些方法: ["children", "clone", "closest", "contents&qu ...
- 学习zepto.js(对象方法)[1]
zepto也是使用的链式操作,链式操作:函数返回调用函数的对象. 但并不是所有的对象方法都可以进行链式操作,举几个例子:.size(),.html()|.text()//不传参数的情况下; 若非特殊说 ...
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- js 对象方法、类方法、原型方法区别
function People(name){this.name=name;//对象方法this.Introduce=function(){alert("My name is "+t ...
- js对象方法
Number对象方法 toFixed() 方法 toFixed()方法返回的是具有指定位数小数的数字的字符串表示.例如: var oNumberObject = new Number(68); ale ...
随机推荐
- 关于JSP无法使用静态引用的问题案例
问题描述: 在写项目时,对于头部信息,尾部信息,分页信息等出现频率高,又很雷同的部分进行抽取时,使用到了jsp的静态引用功能,但之前我每次使用,都会导致程序报错,甚至出现tomcat无法正常启动的情况 ...
- Python命令提示符:不是内部或外部命令,也不是可运行的程序或批处理文件
Python原装IDE(Integrated Development Environment)安装时,需要确认更新pip(什么是 pip ?pip 是 Python 中的标准库管理器.它允许你安装和管 ...
- 上位机-串口通信详解(以RS232为例))
1.什么是串口通信? 写这个的时候我在想应该怎么解释串口通信,因为串口通信很多朋友不了解的原因是涉及到硬件的知识,对于没有相关专业知识的朋友很难理解串口通信.所以我这里只做部分的解释,需要了解更多硬件 ...
- go设置http代理
打算把之前python写的程序切换到golang, 结果调试时发现fiddler无法正常捕获go的http请求 需要设置代理才可以正常捕获 const HttpProxyUrl = "htt ...
- 不同目录下npm run 报错
不同目录下npm 报错sh: webpack: command not found npm ERR! file sh npm ERR! code ELIFECYCLE npm ERR! errno E ...
- java8利用流和lambda表达式对list遍历处理
java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组.过滤.求和.最值.排序.去重. 优点: (1) 简洁,跟之前的传统写法对比,能少写不少代码; (2) 易并行计算.尤其适用 ...
- AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- async 与 Thread 的错误结合
在 TAP 出现之前,我们可以通过 Thread 来完成一些线程操作,从而实现多线程和异步操作.在 TAP 出现之后,有时候为了更高精度的控制线程,我们还是会使用到 Thread .文本讲介绍一种错误 ...
- Android笔记--外部存储空间
存储文件的操作 外部存储空间 私有存储空间和公共存储空间 外部存储空间分为私有+公有 保存文件到外部存储空间的相关代码操作: 私有空间: 公有空间: 记得增加权限(Android_Manifest.x ...
- Spring--案例:测试业务层接口万次执行效率
案例来袭 这样,并不能够分辨出哪个的效率是哪个 可以利用pjp进行这样的操作: 结果:
