前端学习笔记1

什么是对象?


对象的本质

  1. 对象是具有唯一标识性的,即使完全相同的两个对象也不是同一个对象。
  2. 对象是具有状态的,同一对象可能处于不同状态之下。
  3. 对象是具有行为的,对象的状态可能因为他的行为发生改变。
    –《面向对象分析与设计》

不同语言对于对象的描述:

  • 用类的方式描述对象 C++ Java
  • 用原型链的方式描述 JavaScript

唯一标识 (内存地址)

语言状态行为
C++成员变量成员函数
java属性方法
Javascript属性属性
// An highlighted block
var obj = {
	name:"max",
	fn:function(){
	}
}

js 独特的特性: 对象具有高度动态性 这是因为js赋予使用者在运行时修改对象状态和行为的能力

提高抽象能力:
属性描述对象
- 数据属性 value writeable enumerable configurable
- 访问属性 get set

前端属性描述对象 元属性

  • value 属性是目标属性的值。
  • writable 属性是一个布尔值,决定了目标属性的值(value)是否可以被改变。
  • enumerable(可遍历性)返回一个布尔值,表示目标属性是否可遍历。
  • configurable (可配置性)返回一个布尔值,决定了是否可以修改属性描述对象。也 就是说,configurable为false时,value、writable、enumerable和configurable都不能被修改了。
  • 存取器 除了直接定义以外,属性还可以用存取器(accessor)定义。其中,存值函数称为setter,使用属性描述对象的set属性;取值函数称为getter,使用属性描述对象的get属性。

数字的直接量

对象 属性

装箱转换

每一种基本类型Number String Boolean 在对象中都有对应的类(产生临时对象)
1 .toString() => “1”

拆箱操作
在js中,想要将对象转换成原始值,必然会调用toPrimitive()内部函数,那么它是如何工作的呢?

该函数形式如下:
toPrimitive(input,preferedType?)

input是输入的值,preferedType是期望转换的类型,他可以是字符串,也可以是数字。

如果转换的类型是number,会执行以下步骤:

  1. 如果input是原始值,直接返回这个值;

  2. 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;

  3. 否则,调用input.toString()。如果结果是原始值,返回结果;

  4. 否则,抛出错误。

如果转换的类型是String,2和3会交换执行,即先执行toString()方法。

你也可以省略preferedType,此时,日期会被认为是字符串,而其他的值会被当做Number。

综上所述,会有以下计算结果:

// An highlighted block
[] + [] //''
[] + {} //[Object, Object]
{} + [] //0
>[]+[]
>""

加号操作符会将preferedType看成Number,调用ES内部的toPrimitive(input,Number)方法,得到空字符串

>[]+{}
>"[object Object]"

最终会调用双方的toString()方法,再做字符串加法

>{}+[]
>0

但是空对象加空数组就不一样了,加号运算符的定义是这样的:如果其中一个是字符串,另一个也会被转换为字符串,否则两个运算数都被转换为数字。而同时,javascript有这样的特性,如果{}既可以被认为是代码块,又可以被认为是对象字面量,那么js会把他当做代码块来看待

这就很好解释了,{}被当做了代码块,只有+[],根据加法的定义,被转换为0,就得到了结果。

操作符中,==,排序运算符,加减乘除,在对非原始值进行操作时,都会调用内部的toPrimitive()方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值