Failure is part of learning. we should never give up the struggle in life

js 数据类型

一.基本数据类型

 // 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);

发表评论

电子邮件地址不会被公开。 必填项已用*标注