JS面试题:数据类型

355 阅读2分钟

1. 基本数据类型(值类型)

基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

2. 引用数据类型

引用数据类型:对象(Object)、数组(Array)、函数(Function)。(数组和函数都是属于对象的数据类型)

3. NaN是什么类型?

NaN是一个数值类型(number),但不是一个具体数字

console.log(typeof NaN) // number

4. null和undefined区别

null和undefined区别:null会被隐式转化为0,不容易发现错误,先有null后有undefined,undefined就是为了填补之前的坑(null表示一个空对象指针,转化为数值为0;undefined转化为数值是NaN)

5. Symbol用法

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。

      const a = Symbol();
      console.log(a); // Symbol()

      const b = Symbol("test");
      console.log(b); // Symbol('test');

      const c = Symbol();
      console.log(c == a); // false
      console.log(c.toString()); // 'Symbol()'

      var mySymbol = Symbol();

      //第一种写法
      var a1 = {};
      a1[mySymbol] = "Hello!";
      console.log(a1[mySymbol]); // Hello!

      //第二种写法
      var a2 = {
        [mySymbol]: "Hellow!",
      };
      console.log(a2[mySymbol]); // Hellow!

      //第三种写法
      var a3 = {};
      Object.defineProperty(a3, mySymbol, { value: "Hellow!" });
      console.log(a3[mySymbol]); // Hellow!

Symbol需要注意:

  1. symbol函数前不能使用new关键字,否则会报错,这是因为symbol是原始数据类型,而不是对象,所以不能添加属性
  2. symbol可以接受一个字符串作为参数,表示对Symbol的描述,主要是在控制台显示时容易区分。这个参数可以不加,如果不加在控制台输出就是两个Symbol()不利于区分,加上参数就是为了加以区分。
  3. Symbol是唯一的与谁都不相等
  4. Symbol不能与其他值进行运算,否则会报错
  5. Symbol 可以显示的转为字符串,布尔值,但是不能转为数字,转为数字会报错
  6. 由于每一个Symbol都不相同,那么可以作为标识符作为对象的属性名,保证不会出现同名的的属性
  7. Symbol值作为对象的属性名时不能使用点运算符,同理,在对象的内部使用Symbol值时也必须放在方括号中