原始值
原始值:没有属性或方法的值,例如3.14、“google”、true、null、undefined
原始数据类型:拥有原始值的数据
5个原始数据类型:string number boolean null undefined
创建对象
使用对象字面量:{}
使用new关键字
var person = new Object(); person.firstName = "Bill"; person.lastName = "Gates"; person.age = 50; person.eyeColor = "blue";
访问属性
objectName.property
objectName[“property”]
遍历属性
for…in…循环遍历对象
var person = {fname:"Bill", lname:"Gates", age:62}; for (x in person) { txt += person[x]; }
添加属性
通过简单的赋值添加属性
person.nationality = "English";
删除属性
delete 关键字
delete不会删除原型属性
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"}; delete person.age; // 或 delete person["age"];
创建方法
var person = { firstName: "Bill", lastName : "Gates", id : 648, fullName : function() { return this.firstName + " " + this.lastName; } };
访问方法
objectName.methodName()
添加方法
function person(firstName, lastName, age, eyeColor) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.eyeColor = eyeColor; this.changeName = function (name) { this.lastName = name; }; }
Object.valus(object) 将对象的属性值组合成一个数组返回
JSON.stringify(object) 将对象转化成JSON文本返回,该方法不会对函数字符串化
getter和setter
使用set和get关键字创建属性的getter和setter方法
var person = { firstName: "Bill", lastName : "Gates", language : "", set lang(lang) { this.language = lang.toUpperCase(); }, get lang() { return this.language.toUpperCase(); } };
Object.defineProperty(obj,属性名,{属性描述}) 为对象属性绑定get和set方法
var obj = {counter : 0}; Object.defineProperty(obj, "reset", { get : function () {this.counter = 0;} });
以属性形式方法get和set方法
对象构造器
function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor; this.name = function() {return this.firstName + " " + this.lastName;}; } var myFather = new Person("Bill", "Gates", 62, "blue"); var myMother = new Person("Steve", "Jobs", 56, "green");
对象原型
所有的js对象都从原型上继承属性和方法
无法通过简单赋值的方式为对象构造器添加属性或方法
Object.prototype.属性名 = 属性值
Object.prototype.方法名 = function(){…}
Person.prototype.nationality = "English"; Person.prototype.name = function() { return this.firstName + " " + this.lastName; };
管理对象方法
Object.create() 创建一个空对象
const obj = Object.create({}) obj.name = 'zd' obj.getName = function () { return obj.name } console.log(obj.getName())
Object.defineProperty(object,property,descriptor) 为对象属性添加描述
Object.defineProperties(object,descriptors) 同时为对象添加多个属性的描述
Object.defineProperties(obj, { age: { value: 999, get age() { return this.age }, set age(newAge) { this.age = newAge } }, address: { value: '北京', enumerable: false, writable: true, configurable: true } }) console.log(obj.age)
Object.getOwnPropertyDescriptor(object,“property”) 获取对象属性描述
function Person(name) { this.name = name } console.log(Object.getOwnPropertyDescriptor(Person, 'name'))
Object.getOwnPropertyNames(object) 以数组形式返回对象属性
Object.getPrototypeOf(object) 访问对象原型
Object.keys(object) 获取对象的可枚举属性
- 通过{}或者object.属性名 = 属性值简单创建的对象属性的enumerable默认true
- 通过Object.defineProperty()创建的属性enumerable默认false
保护对象方法
Object.preventExtensions(object) 禁止向对象添加属性
Object.isExtensible(object) 判断能否扩展对象属性
Object.preventExtensions(obj) console.log(Object.isExtensible(obj)) // true obj.newProper = '新属性' console.log(obj.newProper) // undefined
Object.seal(object) 设置禁止修改object对象的属性,但可以修改对象属性的值
Object.isSealed(object) 判断是否能够修改对象属性
Object.freeze(object) 禁止对对象进行任何修改(冻结对象)
Object.isFrozen(object) 判断对象是否被冻结
Map对象
1、Map对象存有键值对;2、键可以是任何数据类型;3、键的顺序保持初始插入顺序;4、有表示映射大小的属性;5、键具有唯一性
new Map() 创建Map对象
创建空的Map对象 const fruits = new Map(); // Add new Elements to the Map fruits.set(apples, 500); fruits.set(bananas, 300); fruits.set(oranges, 200); 将一个数组传给Map构造器函数 const fruits = new Map([; [apples, 500], [bananas, 300], [oranges, 200] ]);
Map.set(键名称,值) 在Map中设置键值对
Map.get(键名称) 获取键对应的值
Map.entries() 返回键和值组成的数组
Map.values() 返回值组成的数组
Map.keys() 返回键组成的数组
Map.size 获取元素数量
const map = new Map([ ['苹果', 100], ['香蕉', 200], ['桃子', 300] ]) console.log(map) // Map(3) { '苹果' => 100, '香蕉' => 200, '桃子' => 300 } console.log(map.size) // 3 map.set('柚子', 900) console.log(map.size) // 4 console.log(map.get('香蕉')) // 200 console.log(map.entries()) console.log(map.values()) // { 100, 200, 300, 900 } console.log(map.keys()) // { '苹果', '香蕉', '桃子', '柚子' }
Map.clear() 清空Map
Map.delete(键名称) 删除键指定的元素
Map.has(键名称) 判断Map中是否存在键
Map.forEach(callback) 遍历map对象并对每个元素执行回调函数
// value, key, map 对应 值,键,map对象本身 map.forEach((value, key, map) => { console.log(value, key, map) })
Set对象
1、值具有唯一性;2、Set中可以存储任意数据类型的值
new Set()
Set.add(值) 向set中添加一个值
Set.clear() 清空set
Set.delete(值) 删除指定值
Set.entries() 返回Set对象中键( = 值)值组成的数组
Set.has(值) 判断Set对象中是否存在某个值
Set.forEach(callback) 遍历Set集合并为每个值调用回调函数
Set.keys() 返回Set对象中值组成的数组
Set.values() 与keys() 相同
Set.size set中值的个数
创建空Set对象 const letters = new Set(); letters.add(a); letters.add(b); letters.add(c); 把数组传给Set构造器函数 const letters = new Set(["a","b","c"]);
const set = new Set() set.add('1') set.add('2') console.log(set.values()) // [Set Iterator] { '1', '2' } console.log(set.entries()) // [Set Entries] { [ '1', '1' ], [ '2', '2' ] } console.log(set.keys()) // [Set Iterator] { '1', '2' }