前端知识整理(一)【数据类型】

(以下是从各种网站、同学处整理的前端实习面试题,答案也为自己整理,有错误的话欢迎指正)

1、谈谈Js中基本类型和引用类型。

答:①基本类型:undefined、null、string、number、Boolean、symbol(ES6)

   其中分为普通基本类型和特殊基本类型:

   普通基本类型:undefined、null、symbol

      特殊基本类型:string、number、Boolean

  ②引用类型:Object、Array、RegExp、Date、Function

       ③不同:

  基本类型

  • 基本类型的变量是存放在栈内存(Stack)里的
  • 基本数据类型的值是按值访问的
  • 基本类型的值是不可变的
  • 基本类型的比较是它们的值的比较

  引用类型

  • 引用类型的值是保存在堆内存(Heap)中的对象(Object)
  • 引用类型的值是按引用访问的
  • 引用类型的值是可变的
  • 引用类型的比较是引用的比较

  ④堆内存和栈内存

  栈:连续存储,大小固定。特殊地,null属于object类型,表示一个空指针对象,但是存在栈内存中。

  堆:非连续的树形存储结构。特殊地,new一个实例,生成的是一个对象,即使

var foo = new String("123123")
var bar = String("123123")
console.log(a==b, a===b)

  会输出true false,能够说明new的实例是对象。另外,

var foo = new String("123") var bar = new String("123") console.log(foo==bar, foo===bar)

  会输出false false,这是因为两者都是存储在堆内存中,但指针指向不一致。

  ⑤按值访问和按引用访问&&按引用比较

  基本类型的值是不可变的,比如:

var a = 10;
var b = a; 
a ++ ;
console.log(a); // 11
console.log(b); // 10

  而引用类型的值可变,比如:

var a = [1,2,3];
var b = a;
b.push(4);
alert(b);  //[1,2,3,4]
alert(a);  //[1,2,3,4]   对象类型 : 赋值不仅是值的复制,而且也是引用的传递

var a = [1,2,3];
var b = a;
b = [1,2,3,4];
alert(b); //[1,2,3,4]
alert(a); //[1,2,3]

  对于按引用访问,参考一下两段代码:

    var person1 = '{}';
    var person2 = '{}';
    console.log(person1 == person2); // true 
    var person1 = {};
    var person2 = {};
    console.log(person1 == person2); // false 

  上面一段是字符串之间的比较,而下面一段是对象之间的比较。至于false,这是因为引用类型时按引用访问的,换句话说就是比较两个对象的堆内存中的地址是否相同,那很明显,person1和person2在堆内存中地址是不同的。

 

  

posted @ 2019-10-23 20:50  秋夜星空  阅读(684)  评论(0编辑  收藏  举报