共计 1587 个字符,预计需要花费 4 分钟才能阅读完成。
关于我们
QQ 答疑交流群: 600633658
我们的链接:
知乎 掘金 今日头条 新浪微博 前端网 思否 简书 B 站
什么是对象
是由属性以及属性所对应的值组成的合集,是没有顺序的
除 6 种原始数据类型之外,所有的数据都是对象。
对象和原始类型区别
对象有属性,属性所对应的值可以是原始数据类型,也可以是方法,还可以是对象
对象有方法,方法是一种特殊的属性,对应的值是一个函数,用于实现某种功能,由此可见函数也是对象。
(回顾为什么 String Number Boolean 也可以使用方法或者调用属性)
对象是可变的,改变的本质是对象属性发生了变化。
对象的分类
内部对象
错误对象:Error
本地对象:Boolean String Number Array Date Function Object RegExp
内置对象:解释器内置,不需要使用 New global Math Json
宿主对象
运行环境提供的对象:window document
自定义对象
开发者自己创建的对象
原始类型转换到对象
Object(true)—-{[[PrimitiveValue]]: true}
Object(123)—-{[[PrimitiveValue]]: 123}
Object(“abc”)——{0:’a’,1:’b’,2:’c’,length:3,[[PrimitiveValue]]: true}
Object(null)—-{}
Object(undefined)—-{}
(联系上文对象和原始类型区别)
对象上的两个基础方法
toString
将当前对象用字符串表示出来。
所有的内部对象和宿主对象都重写了 toString 方法。
Boolean String Number 直接返回对应的字符串。
Array: 为数组的每一项调用 toString 方法并将结果用逗号连接
Date: 返回一个由日期和时间组成的字符串(不同的环境下结果不一样)
Function: 返回函数体内部的源码
Object: 返回 [object object]
RegExp: 返回正则表达式的直接量字符串(带转义符)
可以接受一个 2~36 的数字作为参数,表示需要转换的内容是几进制的
valueOf
有原始值返回原始值
没有原始值返回本身
Date 对象返回距离 1970 年 1 月 1 日 0 点的毫秒数
对象转换到原始类型
Boolean: 所有的对象转换到布尔类型都为 true.(JS 中只有 6 个值能转成 false)
String:先调用 toString 方法, 再调用 valueOf 方法
Number:先调用 valueOf 方法,再调用 toString 方法
如何创建一个对象
使用字符字面量的方式(最简单 )
var o={age:123}
注意:属性名中如果有空格,连字符,关键字或者保留字的时候必须使用引号(在 ES5 中保留字可以不使用引号,但是不建议这么做)最后一个逗号需要删除,否则在 IE7 及以下的浏览器中会报错
使用 new 操作符(最标准)
var o=new Object()
var s=new String(‘abcd’)
var n=new Number(123)
var a=new Array(3)
var d=new Date(2017/04/15)
var a=new Array 没有参数的时候可以不写括号
使用 ES5 中的新方法(最精确,最麻烦 )
Object.creat()
接受两个参数:1 要继承的原型,2 对象的详细描述
对象的属性的获取
两种写法:点或者方括号,点后面放属性名称,括号里面放表达式
属性获取过程详解
当 JS 的解释器在代码中遇到“.”或者“[]”的时候将进行以下操作
对“.”或者“[]”前面的表达式进行计算并获取结果
如果是 undefined 或 null 直接报错
如果不是对象就转换成对应的对象
如果是“.”,则查找对应的属性
如果是“[]”,先计算“[]”里面的表达式,再将结果转换为字符串,并查找对应的属性
如果该属性存在则返回对应的值
如果该属性不存在则返回 undefined