js基础4-对象

JavaScript的语言类型:

 简单基本类型:string,number,boolean,null,undefined

 复杂基本类型(对象子类型):

        函数 可调用的对象

        数组

        内置对象(Object,Function,Arry,Date,Error,RegExp,String,Number)

在简单类型字面量访问属性或方法时,引擎会自动的将字面量转为对象

对象内容的访问方式有:1 属性访问(.操作符→属性名要满足命名规范)2 键访问([ ]操作符)

在对象中的属性名永远都是字符串:number会被转为string  对象会被转为"[object Object]"

ES6中增加了可计算属性名,可以在文字形式中使用 [] 包裹一个表达式来当作属性名:var obj = { [prefix + 'name1']:1}

对象的复制:

var newObject = JSON.parse(JSON.stringify(someObject)) → json安全的情况下

在对函数、正则对象、稀疏数组等对象克隆时会发生意外,构造函数指向也会发生错误。对象的循环引用会抛出错误.

var newObj = Object.assign( {}, myObject ); →浅拷贝


深拷贝简单实现

对象属性操作:

直接检测属性特性:Object.getOwnPropertyDescriptor(obj,key)

属性设置:Object.defineProperty(obj,'name',{value:'obj',

writable:false(非严格模式下,对于属性值的修改静默失败),

enumerable:false,(描述符控制的是属性是否会出现在对象的属性枚举中。for...in..对象属性的遍历)

configurable:true(可以使用 defineProperty(..) 方法来修改属性描述符; 为false时,修改时会产生一个 TypeError 错误,属性不可删除)

})

禁止扩展 Object.preventExtensions(obj) 禁止一个对象添加新属性并且保留已有属性

密封 Object.seal(..)  Object.preventExtensions(..) 并把所有现有属性标记为 configurable:false

冻结 Object.freeze(..) 调用 Object.seal(..) 并把所有“数据访问”属性标记为 writable:false

Object.keys(...) 返回可枚举的属性 ,Object.getOwnPropertyNames(..) 会返回一个数组,包含所有属性,无论它们是否可枚举

遍历:ES5 forEach(...) some(...) 运行到回调函数返回true  every(...)运行到回调函数返回false

           ES6  for ... of ...   for... in...

你可能感兴趣的:(js基础4-对象)