按常用排序
1、Object.keys(obj)
返回對象的key名數(shù)組
返回一個由一個給定對象的自身可枚舉屬性組成的數(shù)組,數(shù)組中屬性名的排列順序和使用 for...in 循環(huán)遍歷該對象時返回的順序一致 (兩者的主要區(qū)別是 一個 for-in 循環(huán)還會枚舉其原型鏈上的屬性)。
<script>
let arr = ["a", "b", "c"];
console.log(Object.keys(arr));
//["0", "1", "2"]
/* Object 對象 */
let obj = {
age: 20,
sex: '男'
},
keys = Object.keys(obj);
console.log(keys);
//["age", "sex"]
</script>
2、Object.values()
返回對象的值數(shù)組
方法返回一個給定對象自己的所有可枚舉屬性值的數(shù)組,值的順序與使用for...in循環(huán)的順序相同 ( 區(qū)別在于 for-in 循環(huán)枚舉原型鏈中的屬性 )。
var obj = {
10: 'a',
1: 'b',
2: 'c'
};
console.log(Object.values(obj));
// ['b', 'c', 'a']
3、Object.freeze()
阻止修改對象里面的值和阻止添加新元素,只對對象有用
簡單的數(shù)據(jù)類型使用 const
let obj = Object.freeze({
a:5
})
obj.a = 8
obj.b = 8
console.log(obj)
// 直接報錯
4、Object.assign()
合并多個對象,其實和擴展符的作用一樣,都是淺拷貝
可以用來處理數(shù)組去重
let obj = {
a:5
}
let obj2 = {
b:8
}
console.log(Object.assign(obj,obj2))
console.log({...obj,...obj2})
Object.assign([1, 2, 3], [4, 5])
console.log(Object.assign([1, 2, 3], [4, 5]), '數(shù)組使用該方法===')
// [4, 5, 3]
// 把數(shù)組當作對象來處理
5、hasOwnProperty()
判斷對象自身屬性中是否具有指定的屬性。
let obj = {
a:5,
b:6
}
console.log(obj.c) //undefined
console.log(obj.hasOwnProperty('a')) // true
console.log(obj.hasOwnProperty('c')) //false
6,Object.defineProperties(obj,props)
直接在一個對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。
var obj = {property1:888,property3:777};
Object.defineProperties(obj, {
'property1': {
value: 123,
writable: false
},
'property2': {
value: 'Hello,word',
writable: true
}
});
console.log(obj)
obj.property2 = 456 //修改了
console.log(obj)
obj.property1 = 456 //不能修改
console.log(obj)
7、Object.defineProperty(obj,prop,descriptor)
obj---需要定義屬性的對象;
prop---需定義或修改的屬性的名字;
descriptor---將被定義或修改的屬性的描述符;
在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性, 并返回這個對象。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="test">這是一個測試</div>
<script>
var test = document.getElementById("test");
var data = {};
var i = 0;
Object.defineProperty(data, "b", {
set: function(newValue) {
//當data.b的值改變的時候更新#test的視圖
test.textContent = newValue;
},
get: function() {}
});
setInterval(function() {
i++;
data["b"] = "data.b的值更新了,視圖更新" + i;
}, 1000);
</script>
</body>
</html>
8、Object.getOwnPropertyNames()
獲取一個對象的所有鍵,并組成數(shù)組(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)
var obj = {
age: 10,
sex: "男",
name: "bob"
};
console.log(Object.getOwnPropertyNames(obj))
//["age", "sex", "name"]
9、Object.is()
判斷兩個值是否相同
console.log(Object.is('foo', 'foo'))// true
10、Object.getOwnPropertyDescriptors(obj)
獲取一個對象的所有自身屬性的描述符。