javaScirpt 中基本数据类型和引用数据类型

1:  javaScript 中基本数据类型:
    (1): Number:  数值类型
    String:  字符串类型
    Boolean:   布尔类型
    Null:  空对象
    Undefined:  未定义的
    Symbel (ES6 新增数据类型)

2:  引用数据类型:
     引用数据类型统一称之为Object 类型;   引用数据类型: 包含Object,  Array(数组),  Date (日期对象)   Function (函数);  RegExp:  正则表达式;

  基本数据类型的数据直接存存储在栈中,  而引用数据类型的数据存储在堆中, 每一个对象在堆中有一个引用地址,  引用数据类型在栈中会保存他的引用地址。  以便快速查找内存中的对象。

 随便提一句: 栈内存是自动分配的内存的。 而堆内存是动态分配内存的, 不会自动释放。 所以每次使用完对象
 的时候都需要把它设置为null,  从而减少无用内存的消耗。

3: 判断数据类型有几种方法: 
   typeof;  检测数据类型  但是缺点:  typeof  null 的值为Object (是对象类型),  无法辨别null 还是 
   Object    null 和 object 是两种数据类型对象。
   
   instanceof:  只可以判断对象是否存在目标对象原型链上

   constructor: 构造函数

   Object.prototype.toString.call()  方法:
   一种最好检测基本类型的检测方式  Object.prototype.toString.call();    它可以区分null, 
   String(字符串类型),  boolean(布尔类型), number(数值类型)  undefined (未定义);  array(数组类 
   型)  object(对象);  date(日期对象);  math: (数学对象) 类型。

4: 为什么typeof null 是object 对象;

   因为在 javaScript 中不同对象都是使用二进制进行存储,  如果二进制前三位都是0 的话,  系统会判断为object 类型, 而null的二进制全是0, 自然也就判断为object类型。

5:   == 和 === 有什么区别?

   === 是严格意义上的相等, 会比较两边数据类型的大小。
   数据类型不相同:  则返回 false;  
   数据类型相同, 但是数值大小不相等,  则会返回false;

6:  == 是非严格意义上的相等。
    两边的类型相等,  比较大小。

7:  使用字面量创建对象和 new 创建对象有什么区别? new 内部都实现了什么, 手写一个new: 

    字面量:  字面量创建对象更加方面,  方面阅读。

    不需要作用域解析,  速度更快。
    new 内部:   创建一个新对象。    使新对象的__proto__ 指向原函数的prototype
    改变this 指向 (指向新的obj)  并且执行该函数,  执行结果保存起来作为result.
    判断执行函数的结果是不是null 或者 Undefined(未定义的)  如果是返回之前的新的对象,  如果不是则返回result

8: 字面量new 出来的对象, 和Object.created(null)  创建出来的对象有什么区别?
    字面量创建出来的对象会继承Object 方法和属性,  他们的隐士原型会指向Object 的显示原型。
    而Object.create(null) 创建出来的对象原型为 null, 作为原型链的顶端,  自然也没有继承Object的方法和属性。

9: 什么是原型?  什么是原型链?  如何理解?

  原型分为显式原型和隐式原型, 每一个对象都会有一个隐式原型,  它指向自己的构造函数的显示原型。
  原型链:  多个__proto__ 组成的集合成为原型链。
  所有的实例的__proto__ 都指向他们的构造函数的prototype 
  所有的prototype 都是对象, 自然它的__proto__ 指向的是Object() 的prototype
  所有构造函数的隐式原型指向的都是 Funtion 的显示原型。

  Object 的隐式原型是null  (是空对象);

10: 宏任务与微任务?    宏任务与微任务的都有哪些?
    <script></script> 属于宏任务  setTimeOut,  setInterval,  setImmediate.
    微任务有:   Promise(对象);  .then,  process, nextTick  Object.observe  

    注意: Promise 是同步任务。
 
11:  宏任务和微任务是怎样执行的? (执行顺序)
     (1):  执行宏任务<script></script>  
     (2):  进入script 后, 所有的同步任务主线程执行。
     (3):  所有的宏任务放进宏任务的执行队列中
     (4):  所有的微任务放进微任务执行队列
     (5):  先清空微任务队列
     (6):  再去取一个宏任务,  执行, 再清空微任务队列。
     (7):  依次循环
 
12:  var  let const 有什么区别?
     var  声明变量可进行变量提升,  let 和 const 不会。
     var  可以重复声明
     var  在非函数作用域中定义是挂载到window 上的。

     let 声明变量只是在局部作用域起作用。

     let 防止变量污染
      const 具有let 的所有的特征

     但是不可被改变
        如果使用const 声明的对象的话,  是可以修改对象里边的值的。

13:  箭头函数和普通函数的区别?  箭头函数可以当做构造函数new 吗?
     1:  箭头函数就是普通函数的简写,   但是他不具备普通函数的特性。

     2: 第一点: this的指向问题, 箭头函数的 this指向它所定义时所在的对象, 而不是调用时所在的对象。
     3: 不会进行函数提升
     4: 没有arguments 对象, 不能使用argumnets, 如果要获取参数的话, 可以使用reset 运算符。

     5: 没有yield 属性, 不可以作为生成器Generator(生成器);

     6:  不能 new
         
         没有自己的this,  不能调用call 和apply 方法
         没有prototype,  new关键字内部需要把新对象的__proto__ 指向函数的prototype.

14: 为什么要使用模块化?  都有哪几种方式可以实现模块化, 各有什么特点?

     为什么要使用模块化?
     1:  防止命名冲突
     2:  更好的分离,  按需加载
     3:  更好的服用性
     4:  更高的维护性
     
15: localStorage,  SessionStorage,  cookie,   session   有什么区别?

    localStorage:  生命周期: 关闭浏览器后依然保存数据, 除非手动清空,  否则一直都在。
    作用域:  相同的浏览器的不同标签在同源策略的情况下,  可以共享localSession;


16: sessionStorage:  生命周期关闭浏览器或者标签后当即失效。

    作用域: 只在当前标签可用, 当前的iframe 中且同源可以享用。

   cookie: 只是保存在客户端的,  一般由后端设置值。 可以设置过期时间。
   存储大小只有4k,
   一般用来保护用户的信息的
   在http 下的cookie 是明文传输的,  较不安全。
   cookie: 属性有
     http-only: http-only:不能被客户端更改访问,防止XSS攻击(保证cookie安全性的操作)
     Secure:只允许在https下传输;
     Max-age: cookie生成后失效的秒数
     expire: cookie的最长有效时间,若不设置则cookie生命周期与会话期相同
    
     session:

    session 是保存在服务器端的。
    session 的运行依赖sessioid,  而sessionid  有保存在 cookie中,  所以如果禁用cookie, 
    session 也是不能用的,  不过硬要用也是可以的,  可以把sessionid 保存在URL 中。

    session  一般用来跟踪用户的状态。

    session: 安全性更高,  保存在服务器端,  不过一般为服务器端性能更佳,  会考虑部分信息保存在 
    cookie 中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值