- typeof出来的类型
- number, string, boolean, object, function, undefined
- 隐式类型转换的情形
- 加减乘除号,+ - * /
- +号用作数字相加时,累加数字,1 + true = 2
- +号用作字符串连接时,把其他非字符串转为字符串
- null会转换为0,undefined转换为NaN
- NaN不等于NaN,这是由浮点数的精度决定的
- isNaN
- isNaN()判断NaN不可靠,因为会存在隐式转换
- isNaN('foo' || undefined || {} || {age: 'foo'}) // 都为true
- 使用 x !== x 来判断是否为NaN
- 或者使用ES6的Number.isNaN(要检验的值)
- isNaN()判断NaN不可靠,因为会存在隐式转换
- 真值运算,if && ||
- false, 0, -0, “”, NaN, null, undefined,会转换为false
- 有一个可以具有默认值得可选参数的函数会让真值判断失效
- function point(x, y) { if (!x) { x = 320; } if (!y) { y = 240; } return { x: x, y: y }; }
- 检测undefined的更加准确的方法是用typeof操作,可以区分开0和undefined
- function point(x, y) { if (typeof x === "undefined") { x = 320; } if (typeof y === "undefined") { y = 240; } return { x: x, y: y }; }
- 或者 if (x === undefined) { ... },利用参数与undefined作比较
- 加减乘除号,+ - * /
- call, apply, bind
- call的第一个参数是要绑定this的对象,第二个参数开始是原有函数中的参数
- apply第一个参数同call,后面的参数传数组
- bind是在函数本身后面加要bind的对象,并且要使用表达式函数,而不是声明式函数
- 作用域
- 作用域链:当前作用域找不到,就去父级找
- 函数作用域是定义时候产生的,不是执行时候产生的
- 闭包
- 函数作为返回值
- 函数作为参数传递
- 产生作用域链
- 前端使用异步的场景
- 定时任务
- 网络请求
- 事件绑定
- 跨域
- 浏览器有同源策略,不允许ajax访问其他域的接口
- 协议、域名、端口,有一个不同就算跨域
- 可跨域的三个标签
- img的src
- link 、script 使用CDN
- script用于JSONP
- JSONP
- 服务器端设置http header
- 浏览器有同源策略,不允许ajax访问其他域的接口
- cookie, sessionStorage, localStorage的区别
- cookie
- 用于客户端和服务器端通讯
- 存储量只有4KB
- 所有http请求都带着,会影响获取资源的效率
- API简单,需要封装才能使用 document.cookie
- sessionStorage,localStorage
- 最大5M
- 不用在请求中带着
- setItem(key, value), geiItem(key)
- iOS safari隐藏模式下,localStorage.getItem会报错,,简易使用try catch封装
- 区别
- 容量
- 是否携带到ajax中
- API易用性
- cookie
- 模块化
- 需要异步加载JS,使用AMD
- 使用npm之后建议使用CommonJS
- 渲染页面的过程
- 加载资源的形式
- 输入URL或跳转页面加载html
- 加载html中的静态资源
- 输入URL到得到html的过程(加载一个资源的过程)
- 浏览器根据DNS服务器得到域名的IP地址
- 向这个IP的机器发送http请求
- 服务器收到、处理并返回http请求
- 浏览器得到返回内容
- 浏览器渲染页面的过程
- 根据html结构生成DOM Tree
- 根据CSS生成样式(CSSOM)
- 将DOM和CSSOM整合成RenderTree
- 根据RenderTree开始渲染和展示
- 遇到script标签时,会执行并阻塞渲染
- 加载资源的形式
- window.onload和document.DOMContentLoaded
- 前者是全部资源加载完才执行,包括图片视频
- 后者是DOM渲染完即可执行,无需照顾图片视频
- 性能优化
- 原则
- 多使用内存、缓存或其他方法
- 减少CPU计算,减少网络请求
- 从哪入手
- 加载页面和静态资源速度
- 静态资源的压缩合并,把加载或请求数量减少
- 静态资源缓存
- 使用CDN让资源加载更快
- CDN是不同区域的网络优化,就近加载
- 使用SSR(后端渲染),数据直接输出到html中
- 加载页面和静态资源速度
- 页面渲染速度
- CSS放在前,JS放在后
- 懒加载
- 减少DOM查询,对DOM查询做缓存
- 减少DOM操作,多个操作尽量合并在一起执行
- 事件节流
- 尽早执行操作,如DOMContentLoaded
- 原则
- 安全性
- XSS,跨站请求攻击
- XSRF,跨站请求伪造
网友评论