发表于: 2019-11-13 23:47:26

1 1181


今天完成了什么:


复盘demo;


遇到了什么问题:

存在一些前端样式逻辑问题,问题不大;


收获了什么:

看了下面试题,

js规范

说几条写JavaScript的基本规范?

  • 不要在同一行声明多个变量
  • 请使用===/!==来比较true/false或者数值
  • 使用对象字面量替代new Array这种形式
  • 不要使用全局函数
  • Switch语句必须带有default分支
  • If语句必须使用大括号
  • for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染

W3C对js的规定有哪些?

  • DOM
  • BOM
  • 事件绑定
  • ajax请求(包括http协议)
  • 存储

变量类型

原始类型

字符串(String)、数值(Number)、布尔值(Boolean)、UndefinedNull

占用空间固定,保存在栈中,存储的是值。

原始类型存储的是值,是没有函数可以调用的。之所以'1'.toString()可以被调用,是因为它做了一层封装。被强制转换成了 String 类型,也就是对象类型,所以可以调用toString函数。

对象类型

对象(Object)、数组(Array)、函数(Function

占用空间不固定,地址存在栈内存,值保存在堆中, 复制的是地址,指向同一块内存空间。 使用instanceof检测数据类型

原始类型和对象类型区别?

  1. 原始类型存储的是值,保留在栈内存(空间固定),相等都要重新创建一份
  2. 对象类型存储的是指针,保留在堆内存(空间不固定),相等时引用的是同一份指针

类数组和数组的区别是什么?

类数组: 拥有length属性,不具有数组所具有的方法。

转换为数组
//第一种方法Array.prototype.slice.call(arrayLike);//第二种方法[...arrayLike];//第三种方法:Array.from(arrayLike);

js内置函数是什么?

内置函数: ObjectArray , Function , Boolean , Number , String , Date , RegExp , Error , Json .

作用: 作为构造器函数

函数参数是对象会发生什么?

函数参数是对象指针的副本,当参数重新分配对象时,参数的指针会发生变化。两个变量的值也会不相同

null和undefined的区别是什么?

  • null表示空对象指针

    • 如果定义的变量准备用来保存对象,那么最好初始化为null
  • undefined表示未赋值的变量

  • 在使用==会发生类型转换.导致相等

typeof能正确判断类型吗?

typeof 只能判断原始类型,null除外

在对象类型之中只能识别函数

TIP

js存在的bug, 在最初版本为性能考虑, 使用000开头表示对象, null表示全0, 所以会错误的判断null为对象)

instanceof 的原理:

沿着原型链一层一层向上找, 看是否能找到对应的prototype

类型转换

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

  1. 两等(==)有类型转换,三等(===)没有类型转换
  2. 除了 obj==null 的情况,其余推荐用 ===

JS 中类型转换只有三种情况,分别是:

  • 转换为布尔值
  • 转换为数字
  • 转换为字符串

对象类型转换字符串:

先调用toString() 再调用valueOf()

对象类型转换数值:

对象转换:先ValueOf() 后toString()

JSON

怎么理解json?

是内置的js对象,也是一种数据格式

有两个方法:

JSON.stringify({a:10,b:11})//把对象变成字符串JSON.parse('{a:10,b:11}')//把字符串变成对象

XML与JSON的区别?

json数据体积小 , 传递快 , 与JavaScript交互更加方便 , 容易解析 .

但是数据描述性差 , 不如XML

DOM

DOM的本质?

DOM: Document Object Model 文档对象模型

DOM本质:

浏览器拿到html代码后,DOM把html代码结构化成浏览器可识别以及js可识别的模型 .

(html代码就是一个字符串,但是浏览器已经把字符串结构化成树形结构了。)

DOM是哪种数据结构?

数据结构: 树形

DOM 结构操作:

  • 新增节点 document.createElement(node)
  • 获取父元素 childNode.parentElement
  • 获取子元素 parentNode.childNodes
  • 删除节点 parentNode.removeChild(childNode)

childNodes 和 children的区别?

childNodes 属性返回所有的节点,包括文本节点、注释节点; children 属性只返回元素节点;

Attribute 和 property有何区别?

区别: Attribute是对html标签属性进行获取修改, property是js对象属性的获取修改

对于html的标准属性来说,attributeproperty是同步的,是会自动更新的 但是对于自定义的属性来说,他们是不同步的

异步与单线程

如何理解js单线程?

同一时间只能干一件事

什么是任务队列?

有同步任务和异步任务

seTimeout是异步任务 , 执行到异步任务要挂起

同步任务执行完再执行异步任务

什么是同步(对比异步)?举个例子?

同步:浏览器向服务器请求,用户看到页面,重新发个请求 , 请求完,页面刷新,新内容才出现。

异步:浏览器向服务器请求,用户正常操作,浏览器后端进行请求。请求完,页面不刷新,新内容也会出现。

同步会阻塞代码运行,异步不会

alert同步,seTimeout异步

什么时候需要异步?

在发生等待的情况下 , 程序仍然需要执行其他操作 , 不能阻塞程序运行

异步使用场景有哪些?

  1. 定时任务

  2. 网络请求: ajax , img加载, 脚本等文件加载和下载

  3. 事件绑定

什么是执行栈?

是一个存储函数调用的栈结构,遵循先进后出的原则。

解释一下什么是 Event Loop ?

同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。

当指定的事情完成时,Event Table会将这个函数移入Event Queue

主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。

上述过程会不断重复,也就是常说的Event Loop(事件循环)。

异步任务执行顺序:

  • 首先执行同步代码,这属于宏任务
  • 当执行完所有同步代码后,执行栈为空,查询是否有异步代码需要执行
  • 执行所有微任务
  • 当执行完所有微任务后,如有必要会渲染页面
  • 然后开始下一轮 Event Loop,执行宏任务中的异步代码,也就是 setTimeout 中的回调函数

宏任务(script、setTimeout、setInterval、setImmidiate、I/O、UI Rendering)可以有多个队列

微任务(procress.nextTick、Promise.then、Object.observe、mutataionObserver)只能有一个队列

当执行栈执行完毕后,会首先执行微任务队列,当微任务队列执行完毕再从宏任务中读取并执行,当再次遇到微任务时,放入微任务队列。


明天计划:

修改bug,晚上demo;


返回列表 返回列表
评论

    分享到