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...