JS【详解】对象的内部属性 vs 内部方法

每个JS 对象都有很多内部属性和方法,仅供 JS 引擎管理和操作对象使用,对开发者不可见,只能用特殊的方法访问和修改(不建议修改)

了解它们可以帮助我们更好的理解对象的行为,无需深究其具体实现

下文中,[[]] 只是表示其为内部属性/方法,不能在代码中使用

内部属性

\[Prototype] 对象的原型

js 复制代码
// 访问 [[Prototype]] 的方法
Object.getPrototypeOf(目标对象) // 得到该对象的原型,如 Object.prototype

\[Class] 对象的类型

js 复制代码
// 访问 [[Class]] 的方法
Object.prototype.toString.call(目标对象) // 得到该对象的类型,如'[object Object]'

【应用】获取任意变量的数据类型

js 复制代码
/**
 * 获取任意变量的类型
 *
 * @param x 变量
 * @returns 返回变量的类型名称(小写字母)
 */
function getType(x) {
  // 获取目标数据的私有属性 [[Class]] 的值
  const originType = Object.prototype.toString.call(x); // 以字符串为例:'[object String]'
  // 获取类型属性值中' '的下标
  const spaceIndex = originType.indexOf(" ");
  // 截取类型属性值中' '到末尾']'之间的字符串
  const type = originType.slice(spaceIndex + 1, -1); // 以字符串为例:'String'
  // 将字符串转换为小写
  return type.toLowerCase(); //以字符串为例:'string'
}

\[Extensible] 对象是否可扩展

即,是否可以添加新属性,默认为 true

js 复制代码
// 访问 [[Extensible]] 的方法
Object.isExtensible(目标对象) // true

阻止对象添加新属性

js 复制代码
Object.preventExtensions(目标对象) // [[Extensible]] 变为false

内部方法

内部方法是JavaScript引擎的内部实现细节,因此它们的具体实现和名称可能会因不同的JavaScript引擎而异。

\[Get]

获取对象属性的值

通过 obj.prop 或 obj"prop" 获取对象属性值时,JS 引擎内调用此方法

\[Put]

设置对象属性的值

通过 obj.prop = value 或 obj"prop" = value 修改对象属性值时,JS 引擎内调用此方法

\[HasProperty]

检查对象是否包含某个属性

使用 in 操作符或 Object.hasOwnProperty() 等方法来检查对象是否包含某个属性时,JS 引擎内调用此方法

\[Delete]

删除属性

delete 操作符删除对象属性时,JS 引擎内调用此方法

\[DefineOwnProperty]

在对象上定义或修改属性

使用 Object.defineProperty() 方法来定义或修改对象的属性时,JS 引擎内调用此方法

\[Enumerate]

枚举对象的属性

相关推荐
幸运小猿8 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
速易达网络11 小时前
ECharts 图表制作完全指南:从零到可视化实战
前端·javascript·echarts
paopaokaka_luck11 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
kyriewen11 小时前
我验了 7 种 sticky 失效说法:3 种根本不成立
前端·javascript·程序员
我命由我1234513 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
Momo__14 小时前
你写的 import 重试,从来没生效过
前端·javascript·typescript
tryCbest15 小时前
Vue3——第 11 篇:组合式 API(上)——setup 与响应式 API 深度解析
前端·javascript·vue.js
tryCbest15 小时前
Vue3——第 13 篇:计算属性与侦听器——computed 与 watch 的进化
前端·javascript·vue.js
用户1179536547816 小时前
企业团队编程软件怎么选:AI编程工具的协作与落地能力对比
javascript
believed_breadfruit16 小时前
我开源了一个HTML 分页导出工具,解决了复杂页面的内容截断、跨页错乱和长文档白屏问题
前端·javascript·github