引用数据类型
-对象数据类型 object
{} 普通对象,[]数组对象,/^&/ 正则对象,Math数学函数对象,日期对象
对象Object
{[key]:[value], ...}
任何对象都是由于零到多组键值对(属性名:属性值)组成的(并且属性命不能重复)
-
创建一个基本的对象
let obj = { 1: 'id', name: '张三', age: 60, height: '136CM', weight: '80KG' }
①:对象里的属性名都是
字符串
和数字
-
对象的增删改查
// 增 obj.sex = 'M'; obj['hobby'] = ['唱', '跳', 'rap'] // 改 obj.sex = 'F'; obj['hobby'] = ['篮球'] // 删 => 真删除 / 假删除 delete obj.name // 真 obj.name = null // 假,null用来表示没有对象,不存在值 // 查 // 1. 对象.属性 console.log(obj.name); // '张三' console.log(obj.weight); // '80KG' // 2. 对象["属性名"/数字] console.log(obj[1]); // 'id' console.log(obj['height']); // '136CM'
-
ES5新增的方法:
defineProperty
创建或配置对象的一个属性
使用
object.defineProperty(obj, propertyName, description)
返回值
返回对象 obj
案例
var obj = {}; // 以前添加属性 obj.name = 'xyb'; obj.age = 20; // 现在使用defineProperty(),来增加一个属性 'money' Object.defineProperty(obj, 'money', { value: '3000元', writable: false, // 属性是否可以被重写,默认false enumerable: false, // 属性是否能被遍历,默认false configurable: false // 属性是否可以被删除或者再次修改特性(description),默认为false }) obj.money = '1000元'; // 不能修改,因为writable的存在 delete obj.money // 不能修改,因为configurable的存在 for(let v of obje){console.log(v)} // money的值不能遍历或者枚举出,因为enumerable的存在 console.log(obj);
-
keys/values
获取对象自身的所有属性名/属性值
使用
object.keys() / object.values()
返回值
返回一个数组
案例
var obj = { name: 'xyb', age: 20 }; console.log(Object.keys(obj)); console.log(Object.values(obj));
数组Array
数组是特殊的对象数据类型
:
-
[]
里面写的是属性值
, 0~n 为属性名
,是数字,我们把他称为索引(属性值) -
每个数组默认有一个属性名,叫做 length,用来存储数组的长度
-
typeof 数组,结果是 Object
let arr = ['xyb', 20, '162']; console.log(arr.length) // 3 console.log(typeof arr) // Object arr[arr.length - 1] = 60 // 向数组末尾追加60这个值