Object
console.log(Object.getOwnPropertyNames(Object))
/* ["length", "name", "prototype", "assign", "getOwnPropertyDescriptor",
"getOwnPropertyDescriptors", "getOwnPropertyNames", "getOwnPropertySymbols",
"is", "preventExtensions", "seal", "create", "defineProperties",
"defineProperty", "freeze", "getPrototypeOf", "setPrototypeOf",
"isExtensible", "isFrozen", "isSealed", "keys", "entries",
"fromEntries", "values"]*/
Object.length ==1 //这是定值
Object.name == "object" //这是定值 typeof Object.name ==string
Object.prototype //对象的原型
Object.assign() //Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象上。1-1 如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。如果只有一个target(目标对象),Object.assign会直接返回该对象
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptors()
Object.getOwnPropertyNames()//Object.getOwnPropertyNames返回的是对象所有自己的属性(没有原型对象上的),而Object.keys(obj)则返回的是所有可枚举属性,也就是属性下的enumerable: false
Object.getOwnPropertySymbols()
Object.is()// ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
// 不同之处只有两个:一是+0不等于-0,二是NaN等于自身。
// +0 === -0 //true
// NaN === NaN // false
// Object.is(+0, -0) // false
// Object.is(NaN, NaN) // true
//ES5 可以通过下面的代码,部署Object.is。
Object.defineProperty(Object, 'is', {
value: function(x, y) {
if (x === y) {
// 针对+0 不等于 -0的情况
return x !== 0 || 1 / x === 1 / y;
}
// 针对NaN的情况
return x !== x && y !== y;
},
configurable: true,
enumerable: false,
writable: true
});
//防止扩展,禁止为对象添加属性和方法,但已存在的属性和方法是可以被修改和删除的。不可增加, 可修改 可删除
//密封,防止扩展,但禁止删除对象已存在的属性和方法。不可增加, 可修改 不可删除
//冻结,禁止修改对象已存在的属性和方法,所有字段都是只读的。不可增加, 不可修改 不可删除
Object.preventExtensions()//防止扩展
Object.isExtensible()//检测对象是否是可扩展
Object.seal()//密封对象
Object.isSealed()//检测对象是否是密封
Object.freeze()//冻结对象
Object.isFrozen()//检测对象是否是冻结
Object.create()
Object.defineProperties()
Object.defineProperty()
Object.setPrototypeOf()//Object.setPrototypeOf(),为现有对象设置原型,返回一个新对象
//接收两个参数:第一个是现有对象,第二是原型对象 new 命令通过构造函数新建对象实例的过程,其本质是将实例的原型,指向了构造函数的prototype属性,然后在实例上执行构造函数。
Object.keys()
Object.entries()//俗点就是 Object.entries() 可以把一个对象的键值以数组的形式遍历出来,结果和 for...in 一致,但不会遍历原型属性
Object.fromEntries()///Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。
/*Object.fromEntries([
['foo', 'bar'],
['baz', 42]
])*/
// { foo: "bar", baz: 42 }
//该方法的主要目的,是将键值对的数据结构还原为对象,因此特别适合将 Map 结构转为对象。
/*const entries = new Map([
['foo', 'bar'],
['baz', 42]
]);
Object.fromEntries(entries)
// { foo: "bar", baz: 42 }*/
Object.values()
Array
/ console.log(Array.prototype)
/* ["length", "constructor", "concat", "copyWithin", "fill", "find",
"findIndex", "lastIndexOf", "pop", "push", "reverse", "shift",
"unshift", "slice", "sort", "splice", "includes", "indexOf", "join",
"keys", "entries", "values", "forEach", "filter", "flat", "flatMap",
"map", "every", "some", "reduce", "reduceRight",
"toLocaleString", "toString"]*/
let array=new Array(); //其余 看我的 博客 js篇
array.copyWithin(target, start, end) //IE12+//target 必需。复制到指定目标索引位置。start 可选。元素复制的起始位置。end 可选。停止复制的索引位置 (默认为 array.length)。如果为负值,表示倒数。
array.fill(value, start, end)//IE12+//value 必需。填充的值。start 可选。开始填充位置。end 可选。停止填充位置 (默认为 array.length)
array.flat()//数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
//[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]