更多方法见 MDN
方法 | 作用 | 返回值 | 原对象是否改变 | 备注 |
---|---|---|---|---|
assign(target, ...sources) |
将所有可枚举属性的值从一个或多个源对象复制到目标对象 | 目标对象 | 是 | |
create(proto[, propertiesObject]) |
创建一个新对象, 使用现有的对象来提供新创建的对象的proto | 一个新对象, 带着指定的原型对象和属性 | 如果 propertiesObject 参数是 null 或者非原始包装对象, 则抛出一个 TypeError 异常; 有点类似于继承的概念 | |
defineProperty(obj, prop, descriptor) |
直接在一个对象上定义一个新属性, 或者修改一个对象的现有属性 | 被传递给函数的对象 | ||
defineProperties(obj, props) |
直接在一个对象上定义新的属性或修改现有属性 | 传递给函数的对象 | 是 | props: 要定义其可枚举属性或修改的属性描述符的对象, 对象中存在的属性描述符主要有两种: 数据描述符和访问器描述符 |
getPrototypeOf(object) |
返回指定对象的原型对象 | 给定对象的原型; 如果没有继承属性, 则返回 null | ||
setPrototypeOf(obj, prototype) |
设置对象的原型(即内部 [[Prototype]] 属性) | |||
entries(obj) |
返回给定对象自身可枚举属性的 [key, value] 数组, 其排列与使用 for…in 循环遍历该对象时返回的顺序一致 | 给定对象自身可枚举属性的键值对数组 | ||
keys(obj) |
返回一个包含所有给定对象自身可枚举属性名称的数组 | 一个表示给定对象的所有可枚举属性的字符串数组 | 数组中属性名的排列顺序和使用 for…in 循环遍历该对象时返回的顺序一致 | |
values(obj) |
返回给定对象自身可枚举属性组成的数组 | 一个包含对象自身的所有可枚举属性值的数组 | 值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 ) | |
getOwnPropertyDescriptor(obj, prop) |
返回指定对象上一个自有属性对应的属性描述符, obj 需要查找的目标对象, prop 目标对象内属性名称 | 如果指定的属性存在于对象上, 则返回其属性描述符对象(property descriptor), 否则返回 undefined | 自有属性指的是直接赋予该对象的属性, 不需要从原型链上进行查找的属性 | |
getOwnPropertyDescriptors(obj) |
获取一个对象的所有自身属性的描述符 | 所指定对象的所有自身属性的描述符, 如果没有任何自身属性, 则返回空对象 | ||
getOwnPropertyNames(obj) |
返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组 | 在给定对象上找到的自身属性对应的字符串数组 | ||
getOwnPropertySymbols(obj) |
返回一个给定对象自身的所有 Symbol 属性的数组 | 在给定对象自身上找到的所有 Symbol 属性的数组 | 和 getOwnPropertyNames 相似 | |
getPrototypeOf(object) |
返回指定对象的原型(内部[[Prototype]]属性的值, obj 要返回其原型的对象 | 给定对象的原型; 如果没有继承属性, 则返回 null | 不是 Object.prototype | |
freeze(obj) |
冻结一个对象 | 被冻结的对象 | 在严格模式下, 一个被冻结的对象再也不能被修改 | |
isFrozen(obj) |
判断一个对象是否被冻结 | 表示给定对象是否被冻结的Boolean | ||
is(value1, value2) |
比较两个值是否相同 | 表示两个参数是否相同的布尔值 | 所有 NaN 值都相等(这与==和===不同) | |
isExtensible(obj) |
判断一个对象是否是可扩展的(是否可以在它上面添加新的属性) | 表示给定对象是否可扩展的一个Boolean | 新对象是可以拓展的, 可变的、密封对象、冻结对象都是不可拓展的 | |
isSealed(obj) |
判断一个对象是否被密封 | 表示给定对象是否被密封的一个Boolean | ||
preventExtensions(obj) |
让一个对象变的不可扩展, 也就是永远不能再添加新的属性 | 已经不可扩展的对象 | ||
fromEntries(iterable) |
把键值对列表转换为一个对象 | 一个由该迭代对象条目提供对应属性的新对象 | ||
hasOwnProperty(prop) |
指示对象自身属性中是否具有指定的属性 | 用来判断某个对象是否含有指定的属性的布尔值 Boolean | 所有继承了 Object 的对象都会继承到 hasOwnProperty 方法, 和 in 运算符不同, 该方法会忽略掉那些从原型链上继承到的属性 | |
prototypeObj.isPrototypeOf(object) |
测试一个对象是否存在于另一个对象的原型链上 | 表示调用对象是否在另一个对象的原型链上的布尔值 | 如果 prototypeObj 为 undefined 或 null, 会抛出 TypeError | |
propertyIsEnumerable(prop) |
判断指定的属性是否可枚举 | 用来表示指定的属性名是否可枚举的布尔值 | 此方法可以确定对象中指定的属性是否可以被 for…in 循环枚举, 但是通过原型链继承的属性除外 | |
toLocaleString() |
返回一个该对象的字符串表示 | 表示对象的字符串 | 此方法被用于派生对象为了特定语言环境的目的(locale-specific purposes)而重载使用 | |
toString() |
返回一个表示该对象的字符串 | 一个表示该对象的字符串 | ||
valueOf() |
返回指定对象的原始值 | 返回指定对象的原始值 | JavaScript 调用 valueOf 方法将对象转换为原始值; 很少需要自己调用valueOf方法; 当遇到要预期的原始值的对象时, JavaScript 会自动调用它 | |
seal(obj) |
封闭一个对象, 阻止添加新属性并将所有现有属性标记为不可配置 | 被密封的对象 | 当前属性的值只要原来是可写的就可以改变 |
继承属性/方法
Function
属性
- Function.arguments
- Function.caller
- Function.displayName
- Function.length
- Function.name
方法
- Function.prototype.apply()
- Function.prototype.bind()
- Function.prototype.call()
- Function.prototype.toSource()
- Function.prototype.toString()
使用及拓展
1 | // assign |
defineProperty
- 语法:
Object.defineProperty(obj, prop, descriptor)
- 参数
- obj 要定义属性的对象
- prop 要定义或修改的属性名称或 Symbol
- descriptor 要定义或修改的属性描述符
- 布尔值的键: (默认值都是 false)
configurable
: 当且仅当该属性的 configurable 键值为 true 时, 该属性的描述符才能够被改变, 同时该属性也能从对应的对象上被删除enumerable
: 当且仅当该属性的 enumerable 键值为 true 时, 该属性才会出现在对象的枚举属性中writable
: 当且仅当该属性的 writable 键值为 true 时, 属性的值, 也就是 value, 才能被赋值运算符改变
- 属性值和函数的键: (默认值都是 undefined)
value
: 该属性对应的值; 可以是任何有效的 JavaScript 值(数值、对象、函数等)get
: 属性的 getter 函数, 如果没有 getter, 则为 undefined; 当访问该属性时, 会调用此函数; 执行时不传入任何参数, 但是会传入 this 对象(由于继承关系, 这里的this并不一定是定义该属性的对象); 该函数的返回值会被用作属性的值set
: 属性的 setter 函数, 如果没有 setter, 则为 undefined; 当属性值被修改时, 会调用此函数; 该方法接受一个参数(也就是被赋予的新值), 会传入赋值时的 this 对象
- 布尔值的键: (默认值都是 false)
- 这个方法可以精确添加/修改对象的属性, 且在默认情况下, 使用该方法添加的属性值是不可修改(immutable)的
1 | // 使用 __proto__ |
valueOf
- 每一种基本数据类型的构造函数的原型上都有一个
valueOf
方法 Object.prototype
的原型上也有valueOf
方法- 基本类型
valueOf
: 获取原始值 [[PrimitiveValue]]toString
: 将原始值转换为字符串
- 隐式转换
num.valueOf()
先获取原始值[[PrimitiveValue]].toString()
把获取的原始值转换为字符串
不同类型对象的 valueOf()
方法的返回值
对象 | 返回值 |
---|---|
Array | 返回数组对象本身 |
Boolean | 布尔值 |
Date | 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC |
Function | 函数本身 |
Number | 数字值 |
Object | 对象本身; 这是默认情况 |
String | 字符串值 |
Math 和 Error 对象没有 valueOf 方法
如何去循环遍历一个对象? for in 循环
1 | let o = new Object({name: 'mars', age: 18, address: 'China'}) |