一、JavaScript对象
1、对象的认识
JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript 中,对象是拥有属性和方法的数据。
通常对象是由一对或者多对属性(包含属性名和属性值)组成的集合,属性名也叫做键名,属性值也叫做键值,所以对象的属性也可以称为键值对。
对象:一组属性的结合。
属性:与对象相关的值。
方法:能够在对象上执行的动作。
2、对象的创建
(1)字面量的方式创建对象:
注:{} 是对象的界定符,就是对象的字面量。
用 “.” 点操作符或者[ ]中括号法来获得一个对象的属性。对象属性的访问与使用中,点语法是有局限的,他只能访问符合标识符规范的属性。
(2)判断对象的界定符{}
在语句上下文出现 {} 是代码块(多条语句的集合), 不是对象。例如:条件循环判断语句。
在表达式上下文出现的 {} 才是对象的界定符,才表示一个对象。
(3)对象的属性
对象的属性名是字符串类型。
对象的属性名不是标识符,所以不用遵循标识符的命名规范。
注意:
1. 如果属性名符合标识符规范可以不加引号。
2.如果属性名不符合标识符规范或者是一些关键字,保留字必须加引号。
3.特殊的情况下, 属性必须加引号,如:属性为特殊字符、数字,属性中有空格或关键字、保留字。
(4)属性的不同调用方式
获取对象的一个属性值方法:(对象.属性名)。
获取不符合标识符规范的属性值,使用中括号语法, 中括号放字符串:(对象["属性名"]),
中括号内的属性必须加引号, 如果不加引号则表示一个变量。
(5)对象同名属性覆盖:
修改属性值:对象.属性名 = "新的属性值"。最后打印出的对象同名属性被覆盖了新的属性值。注:对象的属性名不能重复,如果重复,后加的属性值覆盖之前同名的属性值。
(6)如果对象属性不是字符串会隐式转为字符串。
注:对象的属性值可以为任意类型。比如数字、字符串、布尔值、正则表达式、对象、数组、函数……
(7) 对象的方法:能够在对象上执行的动作。
例如:当对象的属性的值是一个函数的时候,我们称这个函数是对象的方法。
(8)对象的常用操作:
(9)对象的遍历
for...in 循环遍历对象:
(10)构造函数创建对象
内置的构造函数:Number 、String、Boolean、Object、Function、Array。
new是一个运算符,和+-*/一样是一个运算符。表示新创建一个对象。
例:js提供了一个内置的构造函数Object用来创建对象:var obj = new Object()。
注意:构造函数创建对象一定要使用new 操作符。
构造函数内部原理:构造函数必须加new操作符,原本他只是一个普通的函数,加new就能产生构造函数的功能,构造函数的功能就是创建对象。
普通函数一旦使用new操作符,函数内部将会隐式执行三步:
1.在函数内部创建一个变量this,值为空对象:var this = {};
2.执行函数体中的代码;
3.返回this对象。
构造函数和普通函数的区别:
1.普通函数是正常调用, 构造函数是通过new操作符来创建对象。
2.构造函数是普通函数的一类,自定义的构造函数遵循大驼峰式命名规则 Person TheFirstName。
3.普通函数默认返回undefined, 但是我们可以通过显示的return关键字来替换函数返回内容。构造函数默认返回对象,明确返回基本数据类型的值则无效。构造函数就是用来创建对象的, 所以构造函数内必须返回一个对象。如果明确使用return 返回对象,那么将会替换默认返回的对象。
注:构造函数可以返回的引用数据类型有:Array数组、Object对象;引用类型:Function函数。
4.构造函数可以通过参数来动态改变对象的属性值。
二、Object 类型
⼤多数引⽤类型值都是Object类型的实例;⽽且Object也是ECMAScript中使⽤最多的⼀个类型。虽然Object的实例不具备多少功能,但对于在应⽤程序中存储和传输数据⽽⾔,是⾮常理想的选择。
创建Object实例的⽅式有两种。第⼀种是使⽤new操作符后跟Object构造函数:
另⼀种⽅式是使⽤对象字⾯量表⽰法。对象字⾯量是对象定义的⼀种简写形式,⽬的在于简化创建包含⼤量属性的对象的过程。下⾯这个例⼦就使⽤了对象字⾯量语法定义了与前⾯那个例⼦中相同的person对象:
三、基本包装类型
为了便于操作基本类型值,ECMAScript还提供了3个特殊的引⽤类型:Boolean、Number和String。这些类型与其他引⽤类型相似,但同时也具有与各⾃的基本类型相应的特殊⾏为。实际上,每当读取⼀个基本类型值的时候,后台就会创建⼀个对应的基本包装类型的对象,从⽽让我们能够调⽤⼀些⽅法来操作这些数据。
1. 只有对象才有属性和方法, 基本数据类型是没有属性和方法的。
2. 如果给基本数据类型的数据添加属性会调用包装类, 没有包装类就报错。
3. 数字、字符串、布尔值的包装类:
4.undefined null 没有包装类
5.js没有类的概念, 其他语言中类是用来创建对象的, 所以js里常把构造函数叫做类,通过构造函数包装成为一个对象。
6.包装类的作用:把不能设置和获取属性的基本数据类型包装成为一个对象。
引⽤类型与基本包装类型的主要区别就是对象的⽣存期。使⽤new操作符创建的引⽤类型的实例,在执⾏流离开当前作⽤域之前都⼀直保存在内存中。⽽⾃动创建的基本包装类型的对象,则只存在于⼀⾏代码的执⾏瞬间,然后⽴即被销毁。这意味着我们不能在运⾏时为基本类型值添加属性和⽅法。
四、JSON
JSON(JavaScriptObject Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。在JSON中,有两种结构:对象和数组。
1、对象:
var json = {"name":"伊冰","age": 18};
一个对象以'{"开始,"}'结束,“key/value”之间运用 “,”分隔。
2、数组:
var Json = [{"name" : "伊冰", "age" : 18}, {"name" : "慜益学", "age" : 22}];
数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。
注:JSON是对象格式的字符串,属性名必须加引号,并且JSON内的引号必须是双引号。
3、JSON的方式
(1)stringify() // 把对象转为JSON
(2)parse() // 把JSON转为对象
注:在数据传输过程中,JSON是以字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换要注意在最外层的{}或[]外加上单引号。