01-对象的创建
Object 是ECMAScript中的一种 数据类型 同时也是一种数据结构
它的本质是 一组 数据(属性) 和 功能(方法) 的集合
使用构造函数创建对象
var o = new Object();
对象的属性 就是对象的数据
o.name = ‘小明’;
o.age = 18;
对象的方法 是对象的功能
o.sayHi = function () {
console.log(‘你好我是’ + o.name + ‘,我今年’ + o.age + ‘岁’);
}
o.sayHi();
————————————————————————————
字面量对象创建
{} 表示对象
字面量的 {} 是 构造函数的 ‘语法糖’ 它的本质依旧是 new Object()
{} 相当于 写了 new Object()
字面量创建的对象 可以直接在大括号中 添加属性
属性名和属性值之间 使用 英文冒号隔开
对象的属性是一种键值对的形式
键(key)
值(value)
02-JSON
JSON(JavaScript Object Notation JS对象简谱) 它是一种轻量的数据交换格式。
它基于ECMAScript的一个子集 采用完全独立于编程语言的文本格式来存储和表示数据
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 就是 符合JavaScript对象语法的一种格式
这种格式被广泛用于 数据的传输和交换
JSON格式
要求属性名(key)必须带有双引号,属性值(value)如果是字符串类型 也必须带有双引号
{
key:value,
key:value,
key:value
}
—————————————————————
在书写字面量 对象时 属性名可以不添加引号
在ECMAScript中 对象的属性名是字符串类型的
如果你不添加引号 则由JS引擎自动为你添加
jsonstring JSON字符串(JS中的概念)
JSON字符串指的是 符合JSON格式的字符串<br /> JSON字符串必须 外层单引号 内层双引号<br /> 如果将外层的单引号去掉 就能得到一个对象 则说明格式正确<br /> JSON字符串 就是 前后端 数据传递的格式
JSON.parse() 将JSON字符串转换成对象<br /> var o2 = JSON.parse(str2);<br /> console.log(o2);<br /> console.log(o3 + ''); '[object Object]' 这个转换没有意义<br /> ---------------------------------------------<br /> JSON.stringify() 将对象转换成JSON字符串
03-对象的操作
使用(.) 可以访问对象的属性
可以使用 中括号 来访问对象的属性 []
console.log(o.age);
console.log(o[‘age’]);
中括号中可以放置变量
var n = ‘name’;
console.log(o.n); 点操作符 直接访问对象的属性 对象o没有属性n 所以访问失败
当一个属性不存在时 访问它会得到undefined结果
console.log(o[n]); 访问对象的 属性 通过变量 n 获得到属性名 name 所以访问的是name属性
给对象 已有的属性名进行赋值 为 修改属性值
给对象 没有的属性名进行赋值 为 添加属性
删除对象的属性 使用 关键字 delete
delete只能用于删除对象的属性 如果对象的属性是对象 可以删除
但是顶层对象无法被删除
不是所有的属性都可以被删除的
有部分属性是无法被删除的
对象属性操作的
CRUD
Create(创建) 添加属性 为一个不存在的属性进行赋值操作
Read(读取) 读取属性 使用点操作符 或 中括号 访问属性
Update(更新) 更新属性 为一个以存在的属性进行赋值操作
Delete(删除) 删除属性 使用关键字 delete 可以删除属性
04-数组的创建
数组也是一种数据结构
在计算机中 数组表示一组连续的内存(有序的数据结构)
可以将多个元素(数据) 使用一个变量名进行存储
数组中的元素 可以是任意数据类型 都是有序排列
数组中每一个元素 都有一个对应的索引值(index)
索引值(index) 是从0开始计数 0表示数组中的第一个元素 1表示第二个元素 以此类推
数组的最小索引是 0 最大索引是 数组的元素数量 - 1
每一个数组都会拥有一个 length 属性 这个length属性表示数组中元素的数量
length是一个不可枚举 且不可删除的属性
数组在ECMAScript中 是以对象的形式存在的
——————————————————————-
数据类型
基本类型 Number Boolean String Null Undefined Bigint Symbol
引用类型 Function Object Array
——————————————————————-
数组的创建方式
1. 构造函数创建数组
var arr = new Array(); 创建数组
delete arr.length; length是不可删除的属性
console.log(arr);
在创建数组时 可以在构造函数中添加实参 实参会依次将元素添加到新数组中
如果数组的构造函数 只有一个参数 且这个参数是number类型
表示需要创建一个数组 并指定数组的长度
这个长度必须是一个大于等于0的值
使用逗号隔开 为数组添加多个元素
数组中的元素可以是任意数据类型
访问数组中的数据 使用 [] 语法
语法: arr[index] 使用数组的索引来获得数组中的成员
可以将数组看成对象
索引就是对象的属性名 只不过属性名是数字 并且有序
访问数组中不存在的索引内容 返回 undefined
清空数组
var arr9 = [1, 2, 3, 4, 5];
arr9.length = 0;
05-引用类型概念
引用类型<br /> Object Array Function<br /> 在创建数据时是否使用了 关键字 new<br /> 所有使用了new关键字创建的数据类型 都是引用类型<br /> var obj = {}; {} 相当于 new Object()<br /> var arr = []; [] 相当于 new Array()<br /> function fn(){} 执行的是 new Function()<br /> -------------------------------------------------------<br /> 关键字 new 用于在内存中 开辟一块新的存储空间 并返回一个对象 存入该空间 返回这个存储内存的地址<br /> 内存<br /> 栈内存(栈是一种 后进先出 的数据结构) 所有的基本数据类型的数据 都被保存在栈内存<br /> 堆内存(堆也是一种 数据结构 它类似于二叉树) 所有的引用数据类型的数据 都存储在堆内存中<br /> var arr = [1, 2, 3];<br /> var arr2 = arr; 将arr的地址 赋值给了变量arr2 所以 arr2和arr是同一个地址 它们是同一个条数据<br /> arr2[0] = 0;<br /> console.log(arr);<br /> ------------------------------------------------------<br /> 比较运算符<br /> 相等比较(==) 不相等比较(!=) 全等比较(===) 不全等比较(!==)
这四个运算符在比较数据相等性时 比较的是栈内存中的内容
基本类型 比较值 引用类型 比较地址
06-引用类型参数
函数的参数是按值传递
如果传递的参数是变量 则将变量的值传递给形参
传参其实就是 赋值操作
var arr = [1, 2, 3, 4];
function fn(a) {
参数a 和数组 arr 的地址相同
a[0] = 0; 当a发生改变时 相当于arr发生改变
}
fn(arr); 此处arr 传递的是值(栈中的值) 是引用地址
console.log(arr[0]);
console.log(arr);
函数的参数传递
参数如果是基本数据类型 则传递值
参数如果是引用数据类型 则传递地址
07-基本包装类型(扩展)
基本包装类型
在ECMAScript中 有三种基本包装类型
Number Boolean String
基本包装类型 指的是将基本数据类型包装成对象(引用类型)
08-数组遍历
遍历的意思 是将所有成员都访问一次
var arr = [54, 2, 61, 65, 23];
数组是一个有序结构 可以按照某种次序进行遍历
按照索引值(index)的 升序和降序 进行访问
索引升序
for (var i = 0; i < arr.length; i++) { i 的变化是 0-5 当i=5时 不符合循环条件则循环结束
console.log(arr[i]); 0-4
}
索引降序
for (var i = arr.length - 1; i >= 0; i—) { i的变化 4- -1 当i=-1时 不符合循环条件 则循环结束
console.log(arr[i]);
}
09-关键字
关键字 in
它的作用是检测某个属性 在对象中 是否存在
var o = {
name: ‘xiaohua’,
phone: 13877889999,
sex: ‘nv’
}
判断 对象 o 是否有 属性 phone
console.log(typeof o.phone !== ‘undefined’);
console.log(typeof o.abc !== ‘undefined’);
console.log(o.phone !== undefined);
console.log(‘phone’ in o); 判断属性 phone 在o中 是否存在
console.log(‘age’ in o); 判断属性 age 在o中 是否存在
———————————————————————————
for-in
是一种循环结构
它的作用是用于遍历对象 它会将对象的属性按照某种顺序进行排列
for-in会枚举出对象中所有的key
再使用 in 判断 属性是否属于该对象
将判断结果为true的 执行循环操作
数组也是对象 所以for-in可以遍历数组
数组是对象
数组的索引就相当于对象的属性名 只不过这个属性名是一个数字 并且有序排列
数组的length是不枚举属性
不存在的数据的索引 是不会有属性名的 所以不会被枚举