要点:

  1. 数据转换
  2. 隐式类型转换
  3. 显式类型转换

    基础数据类型:

    1. 原始类型:

    1. Boolean
    2. Null
    3. Undefined
    4. Number
    5. String
    6. Symbol(ES6)
    7. Bigint(新标准)

      2. 对象:Object

Symbol:

基本特点:

  • 独一无二的值,通过Symbol函数生成
  • 对象的属性名现在可以有string和symbol两种类型,
  • 属性名属于 Symbol 类型,就是独一无二的,可以保证不会与其他属性名产生冲突
  • Symbol()函数前面不能用new,因为symbol是原始类型而不是对象,也不能添加属性
  • 可以接受一个字符串或者对象做参数,对象为参数时候,会调用该对象的toString方法,将其转为字符串,然后才生成一个 Symbol 值。
  • 参数是对Symbol值的描述,相同参数symbol函数的返回值不相等
  • Symbol值不能与其他的数据类型运算,但是可以转换为字符串和布尔值

    Symbol.prototype.description:

  1. 创建Symbol的时候可以添加一个描述,读取之前要先转换为字符串
  1. var s=Symbol('foo')//s的描述就是字符串foo
  2. String(s)
  3. s.toString()//"Symbol(foo)"
  4. s.description// "foo" ES2019写法更方便

作为属性名的symbol:

Symbol 值作为对象属性名时,不能用点运算符。

  1. let mySymbol = Symbol();
  2. // 第一种写法
  3. let a = {};
  4. a[mySymbol] = 'Hello!';//正确写法
  5. //以下三行为错误写法
  6. const mySymbol = Symbol();
  7. const a = {};
  8. a.mySymbol = 'Hello!';
  9. a['mySymbol']//hello
  10. a[mySymbol]//undefined
  11. // 第二种写法
  12. let a = {
  13. [mySymbol]: 'Hello!'
  14. };
  15. // 第三种写法
  16. let a = {};
  17. Object.defineProperty(a, mySymbol, { value: 'Hello!' });
  18. // 以上写法都得到同样结果
  19. a[mySymbol] // "Hello!"
  1. let s = Symbol();
  2. let obj = {
  3. [s]: function (arg) { ... }
  4. };
  5. obj[s](123);
  6. //简略写法(增强的对象写法)
  7. let obj = {
  8. [s](arg) { ... }
  9. };
  10. //

属性名的遍历:

Object.getOwnPropertySymbols()可以获取到指定对象的所有Symbol属性名,是当前对象的所有用作属性名的 Symbol 值组成的数组,不支持for...infor...of、``Object.keys()Object.getOwnPropertyNames()JSON.stringify(),Reflect.ownKeys()可以同时返回普通对象名和Symbol属性名

Symbol.for()和Symblo():

  1. 两者都可以生成Symbol值
  2. 前者会注册在全局环境中等待搜索,后者不会
  3. Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key

显式类型转换:

  • Number()函数
    • 数字->数字
    • 字符串->0(空字符串) ,NaN(不可以转换为数字),数字(可以转换为数字)
    • 布尔值->true 1 ,false 0
    • undefined->NaN
    • null->0
    • 对象->先ValueOf(),再toString()方法,最后Number()
  • String()函数
    • 数值->对应的数字字符串
    • 布尔值->true “true”,false “false”
    • undefined->”undefined”
    • null->”null”
    • 对象->先调用toString(),再ValueOf()方法,最后String()
  • Boolean()函数

    • undefined,null,NaN,+0,-0,‘’返回false

      隐式类型转换:(触发时机)

  • 四则运算

  • 判断语句
  • Native调用:console alert等

常见题目:

前端基础面试题