JavaScript对象
2019-03-21 14:33:19 7 举报
AI智能生成
JavaScript对象
作者其他创作
大纲/内容
语法
声明(文字)形式
var obj = {name:'Jim',age:20}
可以添加多个键值对
构造形式
var obj = new Object()
只能逐个添加属性
obj.name='Jim'
javascript中6种主要类型
简单基本类型
string
number
boolean
null
typeof null 时会返回字符串 "object" 。 1 实际上, null 本身是基本类型
undefined
object
有一种常见的错误说法是“JavaScript 中万物皆是对象”,这显然是错误的。
对象子类型(内置对象)
String
Number
Boolean
Object
Function
Array
Date
RegExp
Error
它们实际上只是一些内置函数,可以当作构造函数来使用
对象的属性
属性名
对象的属性名永远是字符串
如果你使用 string (字面量)以外的其他值作为属性
名,那它首先会被转换为一个字符串。
属性描述符
从 ES5 开始,所有的属性都具备了属性描述符
特性
writable (可写)默认true
如果为false,对属性值的修改会静默失败,严格模式下会抛出TypeError
configurable (可配置)默认true
为true时可以通过defineProperty来修改属性描述符
为false时
不能再把configurable改为true(不可逆)
仍然可以
把 writable 的状态由 true 改为 false ,但是无法由 false 改为 true
会禁止删除这个属性,delete操作会静默失败
enumerable (可枚举)默认true
为true时,此属性会出现在属性枚举中
为false时,此属性不会出现在属性枚举中
获取属性描述符
Object.getOwnPropertyDescriptor( myObject, "a" )
添加或修改属性(如果它是 configurable )并设置特性
Object.defineProperty(..)
不变性
对象常量
结合 writable:false 和 configurable:false 就可以创建一个真正的常量属性(不可修改、重定义或者删除)
禁止扩展
Object.preventExtensions(obj)
禁止一个对象添加新属性
密封
Object.seal(obj)
在禁止扩展的基础上,还让所有属性 configurable:false
冻结
Object.freeze(obj)
在密封的基础上,还让所有属性 writable:false
判断属性是否存在
子主题
("a" in myObject);
会检查属性是否在对象及其 [[Prototype]] 原型链中
Object.prototype.hasOwnProperty(..)
myObject.hasOwnProperty( "a" );
只会检查属性是否在 myObject 对象中
枚举
判断属性是否可枚举
myObject.propertyIsEnumerable( "a" );
得到所有可枚举属性
Object.keys(..)
得到所有属性
Object.getOwnPropertyNames(..)
复制对象
对于JSON安全的对象
var newObj = JSON.parse( JSON.stringify( someObj ) );
ES6 定义了 Object.assign(..) 方
法来实现浅复制
遍历
直接遍历值而不是数组下标
ES6新增 for..of 循环语法
0 条评论
下一页