一.基本数据类型
// 1.1 字符串
let str = 'hello'
// 1.2 数字
let num = 123
// 1.3 布尔值
let flag = true
// 1.4 undefined
let und = undefined
// 1.5 null
let nul = null
// 1.6 symbol
let sym = Symbol()//很少使用
// 1.7 bigint
let bi = 123n
不常用的 Symbol() 有什么用呢
实际上用它申明的变量是可以实现完全不相等的即使它们看上去一样
如:
let id1 = Symbol('id')//这里传入的id就是这个Symbol的描述
let id2 = Symbol('id')
console.log(id1 === id2) // false 虽然它们的描述是一样的但任然是不同的
// 使用Symbol.for创建
let id3 = Symbol.for('我是1号')
let id4 = Symbol.for('我是1号')
console.log(id3 === id4) // true 使用.for创建后就可以出现相同的情况
// 使用Symbol.keyFor获取其描述
let id5 = Symbol.for('我是2号')
console.log(Symbol.keyFor(id5)) // 我是2号 只能获取通过.for创建的Symbol的描述普通的是无法获取的
那么它的就业空间
如下:
//可以解决一些重名但不想数据被覆盖的情况
let person1 = {
name: '张三',
key: Symbol(),
}
let person2 = {
name: '张三',
key: Symbol(),
}
let salary = {
[person1.key]: 1000,
[person2.key]: 2000,// 这样写可以避免覆盖
}
console.log(salary[person1.key]) // 1000
console.log(salary[person2.key]) // 2000
console.log(salary);
// 遍历时隐藏某个属性
let age = Symbol();
class Person {
constructor(name) {
this.name = '张三';
this[age] = 18;
};
getAge() {
return this[age];//这里闭包了
};
};
let p = new Person();
for (let key in p) {
console.log(key); // 输出name age被隐藏
}
// 闭包获取
console.log('闭包获取', p.getAge()); // 输出18
//Object方法获取
Object.getOwnPropertySymbols(p).forEach(item => {
console.log('Object方法获取', item); // 输出Symbol(age)
})
// 遍历p的所有属性
for (const key of Reflect.ownKeys(p)) {
console.log('遍历p的所有属性', key); // 输出name age
}
!所有的基本数据类型都不可以添加属性或者方法
二.引用类型/复杂类型
- 对象(Object):由大括号{}包围的一组属性的集合
- 数组(Array):[]包围的一组 有序 的值的集合
- 函数(Function):可以执行特定操作的可重复书用的代码块
- 日期(Date):表示日期和时间的对象
- 正则表达式(RegExp):用于匹配和操作字符串的对象
- Map:类似对象,键值可以是任意类型,具有极快的查找速度
- Set:类似于数组,成员唯一,允许你储存任何类型的唯一值,不会有隐式转换
如下:
// 2.1 对象 仅支持String和Symbol
let obj = {
name: 'zs',
age: 18
}
console.log(obj);
// 2.2 数组
let arr = [1, 2, 3]
console.log(arr);
// 2.3 函数
function fn() {
console.log('fn')
}
console.log(fn);
// 日期
let date = new Date();
console.log(date);
// 正则
let reg = new RegExp();
console.log(reg);
// Map
let map = new Map();
console.log(map);
// Set
let set = new Set();
console.log(set);