ES6基础

1、Object的基本使用与构造函数的属性:
Object 构造函数创建一个对象包装器
语法 在这里插入图片描述
参数在这里插入图片描述
在JavaScript中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和
方法。 Object 构造函数为给定值创建一个对象包装器。 Object 构造函数,会根据给定的参数创建对
象,具体有以下情况
(1)、如果给定值是 null 或 undefined ,将会创建并返回一个空对象
(2)、如果传进去的是一个基本类型的值,则会构造其包装类型的对象
(3)、如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址
当以非构造函数形式被调用时, Object 的行为等同于 new Object()
在这里插入图片描述
构造函数的属性
Object.length 值为 1
Object.prototype 可以为所有 Object 类型的对象添加属性
2、对象属性类型
ECMA-262 使用一些内部特性来描述属性的特征。这些特性是由为 JavaScript 实现引擎的规范定义 的。
因此,开发者不能在 JavaScript 中直接访问这些特性。为了将某个特性标识为内部特性,规范会用 两个
中括号把特性的名称括起来,比如[[Enumerable]]。
属性分两种:数据属性和访问器属性
数据属性
数据属性包含一个保存数据值的位置。值会从这个位置读取,也会写入到这个位置。数据属性有 4 个特
性描述它们的行为
 [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特 性,以及是
否可以把它改为访问器属性。默认情况下,所有直接定义在对象上的属性的这个特 性都是 true,如前面
的例子所示。
 [[Enumerable]]:表示属性是否可以通过 for-in 循环返回。默认情况下,所有直接定义在对 象上的属
性的这个特性都是 true,如前面的例子所示。
nameValuePair1, nameValuePair2, … nameValuePairN
成对的名称(字符串)与值(任何值),其中名称通过冒号与值分隔。
value
任何值。
// let obj1 = new Object(‘str’);// Object 的行为等同于 new Object()
let obj1 = Object(‘str’);//
console.log(obj1);//String {‘str’}
let obj2 = Object(123);
console.log(obj2);//Number {123}
let obj3 = Object(null)
console.log(obj3);//{} 空对象
let obj4 = Object(undefined)
console.log(obj4);//{} 空对象 [[Writable]]:表示属性的值是否可以被修改。默认情况下,所有直接定义在对象上的属性的 这个特性
都是 true,如前面的例子所示。
 [[Value]]:包含属性实际的值。这就是前面提到的那个读取和写入属性值的位置。这个特性 的默认值
为 undefined
在像前面例子中那样将属性显式添加到对象之后,[[Configurable]]、[[Enumerable]]和 [[Writable]]都
会被设置为 true,而[[Value]]特性会被设置为指定的值。比如
在这里插入图片描述
3.访问器属性
访问器属性不包含数据值。相反,它们包含一个获取(getter)函数和一个设置(setter)函数,不 过
这两个函数不是必需的。在读取访问器属性时,会调用获取函数,这个函数的责任就是返回一个有效 的
值。在写入访问器属性时,会调用设置函数并传入新值,这个函数必须决定对数据做出什么修改。访 问
器属性有 4 个特性描述它们的行为。
 [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特 性,以及是
否可以把它改为数据属性。默认情况下,所有直接定义在对象上的属性的这个特性 都是 true。
 [[Enumerable]]:表示属性是否可以通过 for-in 循环返回。默认情况下,所有直接定义在对 象上的属
性的这个特性都是 true。
 [[Get]]:获取函数,在读取属性时调用。默认值为 undefined。
 [[Set]]:设置函数,在写入属性时调用。默认值为 undefined。 访问器属性是不能直接定义的,必须
使用 Object.defineProperty()。下面是一个例子:
在这里插入图片描述
4.Object.defineProperty()
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属
性,并返回此对象。
应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。 在这里插入图片描述
备注说明:在ES6中,由于 Symbol类型的特殊性,用Symbol类型的值来做对象的key与常规的定
义或修改不同,而Object.defineProperty 是定义key为Symbol的属性的方法之一。
该方法允许精确地添加或修改对象的属性。通过赋值操作添加的普通属性是可枚举的,在枚举对象属性
时会被枚举到( for…in 或 Object.keys 方法),可以改变这些属性的值,也可以 删除 这些属性。
这个方法允许修改默认的额外选项(或配置)。默认情况下,使用 Object.defineProperty() 添加的
属性值是不可修改(immutable)的。 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。存取描述符是由 getter 函数和 setter 函数所描述的属性。一个描述符只能是这两者其中之一;不能同时是两者这两种描述符都是对象。它们共享以下可选键值(默认值是指在使用 Object.defineProperty() 定义属性时的默认值):configurable当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false 。enumerable当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。默认为false 。数据描述符还具有以下可选键值value该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。 writable 当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符 (enUS)改变。默认为 false。 存取描述符还具有以下可选键值get 属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。默认为 undefined。
set
// 语法:Object.defineProperty(obj, prop, descriptor)
// 参数:
// obj 要定义属性的对象
// prop要定义或修改的属性的名称或 Symbol
// descriptor 要定义或修改的属性描述符
// 返回值 :被传递给函数的对象。
configurable 属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接
受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。默认为 undefined。描述符默认值汇总拥有布尔值的键 configurable、enumerable 和 writable 的默认值都是 false。属性值和函数的键 value、get 和 set 字段的默认值为 undefined

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

负数系

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值