var obj = Object.create(null)
複製代碼
var obj = Object.create(null)
map[5] = 5
map['5'] // 5
複製代碼
var obj = Object.create(null)
var key1 = {}
var key2 = {}
map[key1] = 100
mapp[key2] // 100 緣由:Object->String的類型轉換中被轉換成了"[object,Object]"
複製代碼
var obj = {
name:'luoyi'
}
Object.getOwnPropertyDescriptor(obj,'name')
複製代碼
Object.defineProperty(obj,'sex',{
value:'girl',
writable:true, //是否能夠修改屬性的值
configurable:true, //是否可使用defineProperty來修改屬性的描述
enumerable:true //是否會出如今對象的枚舉中
})
複製代碼
決定是否能夠修改屬性的值數組
是否能夠經過defineProperty配置對象的屬性安全
設置對象的屬性是否可枚舉bash
var obj = {}
Object.defineProperty(obj,'CONSTVALUE',{
value:40,
writable:false,
configurable:false
})
複製代碼
禁止對象擴展屬性,可是能夠修改屬性的值app
var obj = {
name:'luoyi'
}
Object.preventExtensions(obj)
obj.sex = 'girl'
obj.sex // undefined
obj.name = 'luoyi3'
obj.name // 'luoyi3'
delete obj.name
obj.name // undefined
複製代碼
不能添加新屬性,不能從新配置屬性的描述,不能刪除屬性,可是能夠修改屬性的值函數
只會檢查對象自己,不會檢查原型鏈ui
var obj = {
a : 1,
b : 2
}
obj.hasOwnProperty(a) // true
obj.hasOwnProperty(c) // false
複製代碼
檢查給定屬性是否直接存在於對象中,而且知足enumerable:truespa
var obj = {a : 1}
obj.propertyIsEnumerable('a') //true
複製代碼
返回對象自己可枚舉屬性組成的數組,不包括Symbol類型code
var obj = {a : 1}
Object.keys(obj) // ["a"]
複製代碼
返回對象自己全部屬性的組成的數組包括可枚舉和不可枚舉 不包括Symbol類型cdn
獲取實例對象的原型對象
返回包含全部Symbol自有屬性的數組。
獲取對象的全部類型的key值包括Symbol類型
var obj = {
name :'luoyi',
age:3
}
var obj1 = Object.assign({},obj)
複製代碼
var obj3 = {...obj}
複製代碼
var someObj = {
name:'luoyi',
age: 3
}
var newObj = JSON.parse(JSON.stringify(someObj))
複製代碼
function deepClone(obj,hash=new WeakMap(){
// 判斷循環引用
if(hash.has(obj)){
return hash.get(obj)
}
if(obj instanceof Date){
return new Date(obj)
}
if(obj instanceof RegExp){
return new RegExp(obj)
}
var t = new obj.constructor()
hash.set(obj,t)
for(var key in obj){
if(obj.hasOwnProperty(key)){
t[key] = deepClone(obj[key],hash)
}
}
return t
}
複製代碼