集合
一个标识符(集合),可以存储多个数据, 数据不能重复。
集合与数组的区别
集合的内容具有唯一性 ( 全等匹配) 去重复。
// 声明集合 构造函数
let F70 = new Set();
//集合赋值
F70.add(1);
F70.add(2);
F70.add(1);
F70.add("1");
//使用集合
console.log(F70);//Set { 1, 2, '1' } 可以看出集合有去重复。
//数组去重
let F71 = [];
F71.push(123);
F71.push(234);
F71.push(234);
console.log(F71);//[ 123, 234, 234 ]
let F70 = new Set(F71);
F71 = [...F70];
console.log(F71);//[ 123,234 ]
//集合的方法和属性
/**
* 属性size
* 书写格式: 集合.size
* 功能:输出集合存储数据的个数
*/
let F70 = new Set([1, 2, 3])
console.log(F70.size);//3
/**
* 集合的方法
*
* 链式调用
* 一行代码连续书写多个方法。
* 由于add方法的返回值是集合
* 因此可以在add后面继续添加add
*/
let F70 = new Set();
F70.add("A").add("B").add("C");
console.log(F70);//Set { 'A', 'B', 'C' }
//删除集合里的内容
F70.delete("A"); //小括号里删除的内容
console.log(F70); //Set { 'B', 'C' }
//集合的键值对(键值就是键名)
//清空集合
F70.clear();
console.log(F70);//Set {}
let F70 = new Set([1, 2, 3]);
//查找
console.log(F70.has(1)); //true
//集合遍历
for (let item of F70.keys()) { //键名
console.log(item);//1 2 3
}
for (let item of F70.values()) { //键值
console.log(item);//1 2 3
}
for (let item of F70.entries()) { //键名和键值
console.log(item); // [1,1] [2,2] [3,3]
}
Object 对象
数据结构:存储多个数据
一切事物皆对象!!!
声明对象
字面量声明
书写格式: 关键字 标示符 赋值符号 大括号 分号
let F70 = {} ;
let F70 = {};
console.log(F70, typeof F70);//{} object
构造函数
书写格式: 关键字 标示符 赋值符号 new Object();
let F70 = new Object();
let F70 = new Object();
/**
* 【对象的初始化】
* {
* 属性名1 : 属性值1,
* 属性名2 : 属性值2,
* ...
* 属性名n : 属性值n,
*
* 方法名1 : function (){代码块},
* 方法名2 : function (){代码块},
* ...
* 方法名n : function (){代码块}
* }
*
*/
let zhuozhuo = {
eyes: 2,
legs: 2,
length: 100,
life: 100,
money: 1000,
suidashi: function() {
console.log(`sui!!!`);
this.life--;
this.money += 1000;
},
dabaojian: function() {
this.life++;
this.money -= 999;
}
}
console.log(zhuozhuo.eyes);//2
console.log(zhuozhuo.length);//100
//使用对象的方法
zhuozhuo.suidashi();
console.log(shexiaoguo.life);//99
console.log(shexiaoguo.money);//2000
zhuozhuo.dabaojian();
console.log(shexiaoguo.life);//100
console.log(shexiaoguo.money);//1001
/**
* 当使用对象不存在的属性,会得到undefined
* 原因:使用之前,JS会在对象中添加此属性,并赋值undefined
*/
let F72 = {};
console.log(F72.length); //undefined
console.log(F72.yangfan); //undefined
//对象属性和方法的添加
let f70 = {
money: 100,
work: function() {
this.money += 100;
},
shopping: function(payMoney) {
money -= payMoney;
}
};
f70.gf = "guoguo";
f70.bf = "xiaoxiao";
f70.money = 0;
console.log(f70);//{
// money: 0,
// work: [Function: work],
// shopping: [Function: shopping],
// gf: 'guoguo',
// bf: 'xiaoxiao'
}
console.log(f70.gf);//guoguo
f70.cry = function() {
this.money += 1000;
}
f70.cry();
console.log(f70.money);//1000
//我们发现若添加一个存在的属性,会把原有的属性进行覆盖。
// 为了解决这个问题,会声明一个Symbol类型的变量。
// 声明Symbol变量
//注:1、小括号里的内容是Symbol变量的注释
//2、声明是不要添加new
let money = Symbol();
// 给Symbol变量赋值(需要告知给哪个对象添加)
f70[money] = 0;
console.log(f70.money); //1000
// 使用方式:属性名[symbol变量]
console.log(f70[money]); //0
//属性和方法的删除
//删除属性的格式: delete 对象名.属性名 ;
delete f70.money;
console.log(f70.money);//undefined
// 使用被删除的属性,会等到undefined
// 调用被删除的方法,会报错(对象没有这个方法)
//删除方法的格式: delete 对象名.方法名;
//注:方法名后不加小括号
// delete huangmiliang.work;
//遍历对象
let f71 = {
name: "WLM",
age: "18",
gender: "male"
};
//遍历对象的键名
for (let item of Object.keys(f71)) {
console.log(`键名:${item}`);//键名:name 键名:age 键名:gender
}
//遍历对象的键值
for (let item of Object.values(wulinmeng)) {
console.log(`键值:${item}`);//键值:WLM 键值:18 键值:male
}
//遍历对象的键值对
for (let item of Object.entries(wulinmeng)) {
console.log(`键值对:${item}`);//键值对:name,WLM 键值对:age,18 键值对:gender,male
}
//判断对象中是否存在要查找的键名
console.log("name" in f71);//true
console.log("123" in f71);//false
//对象的嵌套
let f73 = {
name: "WLM",
age: "18",
gender: "male",
gf: {
name: "xiaohua1",
age: 18,
song: function() {
console.log(`酒醉的蝴蝶!!!`);
},
dance: function() {
console.log(`动词打次!!!`);
}
}
};
console.log(wulinmeng.gf.name);//xiaohua1