怎么判断一个数组为连续数组,采用空间复杂度和时间负责度最小。 for一次就好了
折线图和饼图还有拓扑图组件开发
loadsh deepclone
克隆一个对象
==========================================
js 六种数据类型
number (基本类型——>引用类型)
string (基本类型——>引用类型)
boolean (基本类型——>引用类型)
undefined
null
Object (包装类型、引用类型)
eg:
var str = ‘string’;
console.log(str.length); //6 //str 是基本类型但是在.length 属性时,会去调用其引用类型上的方法。用完后就会把他销毁
str.t = 100;
console.log(str.t);// undefined
js 类型检查
typeof //适合判断基本类型 和 函数类型 number,boolean,string,function; typeof null === “object” 历史原因
instanceof // 判断一个对象常用, 这个是基于原型链的一个判断 obj instanceof Object 做操作数的原型链上是否有右操作数。在不同iframe和window间检测时失效。
Object.prototype.toString
Object.prototyoe.toString.apply(“1”) === “[object String]”
Object.prototyoe.toString.apply(1) === “[object Number]”
Object.prototyoe.toString.apply(true) === “[object Booleab]”
Object.prototyoe.toString.apply([]) === “[object Array]”
Object.prototyoe.toString.apply(function(){}) === “[object Function]”
Object.prototyoe.toString.apply(null) === “[object Null]”
Object.prototyoe.toString.apply(undefined) === “[object Undefined]”
注:IE6/7/8 Object.prototype.toString.apply(null) 返回 “[object Object]”
constructor
constructor是指向这个函数的构造器/构造函数。但是 这个指向是可以被改写的所以不靠谱
duck type (鸭子类型——根据这个需判断类型对象的特征)
eg: 需要判断一个数组,可以通过判断一些方法或者特征,比如push pop 等
重置浏览器样式 normal.css reset.css
兼容移动端 采用rem; base.js //dpr 像素比
base.css 进行兼容各种情况
工具函数tools.js
bridge.js 桥梁 app和前端相互提供方法调用。
页面路由管理 vue-router keep-alive; query,params 两种方式拿传递过来的参数
ajax请求 axios;
组件传值 emit
页面传值 vuex
增强用户体验可以采用 Skeleton(基于Vuejs实现 Skeleton Loading 骨架图)
打包可以采用webpack, 压缩和混淆; //loader scss, 可以审核性能图
=======================
垂直水平居中:1 position: absolute; transform; 2 display: flex;
能拿到请求参数的位置: formData、地址栏Url、请求头header
##js
变量声明 函数声明 都会前置。
函数声明和函数表达式
事件循环机制 eventLoop
声明是无法确定,运行时才能确定。
1、原型和原型链 prototype (显示原型) prototype (隐式原型)
2、this 作用域 闭包
3、异步单线程
this 要在执行时才能确定值,定义时无法确认(“谁调指谁,没有谁调用时指window”)
arr.sort(); // 不行
arr.sort(function(n1, n2) {
return n1 - n2;
})
##es6
let 赋值过了的不能重复赋值 严格模式也可以做到这点
const 给常量赋值
结构赋值
String 和 Array Object Function新增了很多方法。
新增Symbol类型
Set Map
Generator生成器 yaild next
Class 继承
Module 模块化
箭头函数 的区别和作用 https://www.cnblogs.com/biubiuxixiya/p/8610594.html
promise then()
pending、fulfilled、rejected
数组如何去重 https://blog.csdn.net/longlc123/article/details/83792127
##设计模式 https://www.cnblogs.com/smlp/p/9776789.html
单例模式
观察者模式 // 一对多
命令模式 // 一对一
工厂模式
前端页面性能
(1) 加载优化 (减小请求资源大小,减少请求个数) 采用打包工具压缩, 采用模块化, 浏览器请求是有限制的如果同时向一个域名请求最多并行请求5个。可以将资源分开放置到不同域名服务器,如图片放到图片服务器,js css 也可分别放置到不同服务器。
(2) 运行优化 0、html上的优化(尽量采用语义化标签,尽量防止页面重排和重绘),1、css优化 选择器上的优化。能采用id选择的就不采用class选择,性能相差很大。3、减少请求采用缓存。
有ip地址 怎么把 资源下载下来? tcp/ip ???
前端安全
调试功能
全平台调试的Weinre 和Adobe Edge Inspect CC,国人自研的iOS专用工具MIHTool
兼容ie8 及一下:
bind
Object.prototype.toString.apply(null)
《项目经验》
(1).每次发送ajax请求前都会有一个option
答案:
查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。
XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协议/相同主机名/相同端口的资源, 如果要突破这个限制, 那就是所谓的跨域, 此时需要遵守CORS(Cross-Origin Resource Sharing)机制。
那么, 允许跨域, 不就是服务端设置Access-Control-Allow-Origin: *就可以了吗? 普通的请求才是这样子的, 除此之外, 还一种叫请求叫preflighted request。
preflighted request在发送真正的请求前, 会先发送一个方法为OPTIONS的预请求(preflight request), 用于试探服务端是否能接受真正的请求,如果options获得的回应是拒绝性质的,比如404\403\500等http状态,就会停止post、put等请求的发出。
那么, 什么情况下请求会变成preflighted request呢?
1、请求方法不是GET/HEAD/POST
2、POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
3、请求设置了自定义的header字段