1.ES6箭头函数和普通函数的区别(至少3点)

  1. 1)箭头函数的this永远指向其上下文的 this,任何方法都改变不了其指向,如call(), bind(), apply(),普通函数的this指向调用它的那个对象
  2. 2)变量提升,由于js的内存机制,function的级别最高,而用箭头函数定义函数的时候,需要var(let const)关键词,而var所定义的变量不能得到变量提升,故箭头函数一定要定义于调用之前
  3. 3)箭头函数不能作为构造函数,不能被new,没有property

2.弹性布局

3.git常用指令

  1. 1.查看版本库状态:git status
  2. 2.添加文件到stage中:
  3. $ git add README.md #仅添加README.md文件
  4. $ git add *.py #添加所有python文件
  5. $ git add . #添加当前目录下的所有文件
  6. 3.stage中的内容提交到当前分支:
  7. $ git commit -m "msg of commit" -a #提交stage中所有内容
  8. $ git commit -m "msg of commit" #同上
  9. $ git commit -m "msg of commit" filename #仅提交filename文件
  10. $ git commit --amend #增补提交,还没有用过
  11. 4.撤销在工作区做的修改:
  12. $ git checkout -- README.md #撤销对文件README.md的修改
  13. $ git checkout -- . #撤销对所有文件的修改
  14. $ git checkout -- *.py #撤销对所有python文件的修改
  15. //1)文件在修改后没有add到stage区,撤销之后文件状态与版本库保持一致;
  16. //2)文件已经add到stage区,而后在工作区有对其进行了修改,此时撤销工作区中文件的修改,文件和stage区中的状态保持一致。
  17. 5.撤销addstage中的内容:
  18. $ git reset HEAD README.md #将stage区中的README.md文件撤销回工作区
  19. $ git reset HEAD #将stage区中的所有文件撤销回工作区
  20. 6.查看版本日志:git log
  21. 7.版本回退:
  22. //当我们发现最近提交到版本库中的内容有误,需要将版本库回退到之前某个版本时,就需要使用如下指令进行版本回退:
  23. $ git reset --hard HEAD^ #回退到上一个版本
  24. $ git reset --hard HEAD^^ #回退到上上个版本
  25. $ git reset --hard HEAD~10 #回退到之前10个版本
  26. $ git reset --hard 5185793 #回退到版本号开头是5185793的版本
  27. 8.版本恢复:
  28. $ git reflog
  29. 5185793 HEAD@{0}: reset: moving to HEAD^
  30. a65eebe HEAD@{1}: commit: add push_email.py
  31. 5185793 HEAD@{2}: commit: add test
  32. 0e24ff7 HEAD@{3}: commit (initial): add README.md
  33.  
  34. $ git reset --hard a65eebe
  35. 9.删除文件:
  36. $ git rm test #删除文件
  37. rm 'test'
  38. $ git status #查看状态
  39. On branch master
  40. Changes to be committed:
  41. (use "git reset HEAD <file>..." to unstage)
  42.  
  43. deleted: test
  44. $ git commit -m"remove test" #提交删除
  45.  
  46. //误删,使用checkout恢复该文件
  47. $ git checkout -- test

4.npm维护的文件中有哪几种依赖:

  1. dependencies:应用依赖
  2. devDependencies:开发环境依赖
  3. peerDependencies:同等依赖,或者叫同伴依赖
  4. optionalDependencies:可选依赖
  5. bundledDependencies / bundleDependencies:打包依赖

5.iframe优缺点:

  1. //优点
  2. 1.iframe能够原封不动的把嵌入的网页展现出来。
  3. 2.如果有多个网页引用iframe,那么你只需要修改iframe的内容,就可以实现调用的每一个页面内容的更改,方便快捷。
  4. 3.网页如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用iframe来嵌套,可以增加代码的可重用。
  5. 4.如果遇到加载缓慢的第三方内容如图标和广告,这些问题可以由iframe来解决。
  6. 5.重载页面时不需要重载整个页面,只需要重载页面中的一个框架页(减少了数据的传输,增加了网页下载速度)
  7. //缺点
  8. 1、页面样式调试麻烦,出现多个滚动条;
  9. 2、浏览器的后退按钮失效;
  10. 3、过多会增加服务器的HTTP请求;
  11. 4、小型的移动设备无法完全显示框架;
  12. 5、产生多个页面,不易管理;
  13. 6、不容易打印;
  14. 7、代码复杂,无法被一些搜索引擎解读。

6.src和href的区别:

  1. //src
  2. srcsource的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。
  3. 当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
  4. //href
  5. hrefHypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如link a

7.JS中避免回调地狱的方法:

  1. //1.什么是回调地狱(callback hell)
  2. 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱(callback hell)
  3.  
  4. //2.如何避免
  5. //2.1 解决回调嵌套问题(ES6 promise)
  6. Promise 对象就是为了解决这个问题而提出的。它不是新的语法功能,而是一种新的写法,允许将回调函数的嵌套,改成链式调用。
  7. .then(function(){
  8. console.log('frist');
  9. }).then(function(){
  10. return sayhello("huawei");
  11. console.log('second');
  12. }).then(function(){
  13. console.log('second');
  14. }).then(function(){
  15. return sayhello("apple");
  16. }).then(function(){
  17. console.log('end');
  18. }).catch(function(err){
  19. console.log(err);
  20. })
  21. //但看着那一堆then,其实并没有将嵌套回调的问题根本上的解决,只是换了一种写法而已。
  22. //2.2 ES6 co/yield方案
  23. yield: Generator 函数是协程在 ES6 的实现,而yield Generator关键字, 异步操作需要暂停的地方,都用yield语句注明。
  24. co: co 模块是著名程序员 TJ Holowaychuk 2013 6 月发布的一个小工具,用于 Generator 函数的自动执行。
  25. //2.2.1 什么是Generator 函数?
  26. Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即主动交出执行权,暂停执行)。
  27. 整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用yield语句注明。Generator 函数的执行方法如下。
  28. function* gen() {
  29. yield console.log("test 1");
  30. yield console.log("test 2");
  31. yield console.log("test 3");
  32. return y;
  33. }
  34.  
  35. var g = gen();
  36. g.next()//“test 1”
  37. g.next()//“test 2”
  38. Generator 函数不同于普通函数的另一个地方,即执行它不会返回结果,返回的是指针对象。调用指针gnext方法,会移动内部指针(即执行异步任务的第一段),指向第一个遇到的yield语句,打印”test 1”并暂停,再次调用next会打印”test 2”暂停住,但不会打印”test 3
  39. Generator 函数可以暂停执行和恢复执行,这是它能封装异步任务的根本原因
  40. //2.3 ES7 async/await 方案
  41. async/awaites7的新标准,并且在node7.0中已经得到支持。
  42. 它就是 Generator 函数的语法糖,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。可以理解官方对coGenerator 封装方案。
  43.  
  44. async关键字用于修饰functionasync函数的特征在于调用return返回的并不是一个普通的值,而是一个Promise对象,如果正常return了,则返回Promise.resolve(返回值),如果throw一个异常了,则返回Promise.reject(异常)。
  45.  
  46. await关键字只能在async函数中才能使用,也就是说你不能在任意地方使用awaitawait关键字后跟一个promise对象(你想要执行的异步操作),函数执行到await后会退出该函数,直到事件轮询检查到Promise有了状态resolvereject 才重新执行这个函数后面的内容。
  47.  
  48. //使用
  49. var sayhello = function(name, ms){
  50. return new Promise(function(resolve, reject){
  51. setTimeout(function(){
  52. console.log("hello");
  53. console.log(name);
  54. if(name === "huawei")
  55. return reject(name);
  56. else
  57. return resolve("helloworld");
  58.  
  59. }, ms);
  60. });
  61. }
  62.  
  63. async function test() {
  64. try {
  65. console.log('frist');
  66. await sayhello("xiaomi", 2000);
  67. console.log('second');
  68. await sayhello("huawei", 1000);
  69. console.log('end');
  70. await sayhello("apple", 500);
  71. }
  72. catch (err) {
  73. console.log('err:'+err);
  74. }
  75. };
  76.  
  77. test();
  78.  
  79. //对错误的处理
  80. await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到,而后续的await函数就不会继续执行了。我们应该在将await语句放在try catch代码块中,如果有多个await命令,可以统一放在trycatch结构中,我们通过这种方式对发生的异步错误进行处理。

8.判断变量为数组类型:

  1. Object.prototype.toString.call(数组)=='[object Array]'; //true为数组

9.浏览器缓存问题:

https://blog.csdn.net/u011001084/article/details/53005615/

10.JS常用跨域方法:

  1. 1.CORSCross-Origin Resource Sharing
  2. 2.jsonp
  3. 3.document.domain + iframe
  4. 4.html5 window.postMessage(message,targetOrigin)

11.react高阶组件:

先来回顾高阶函数的定义:接收函数作为输入,或者输出另一个函数的一类函数,被称作高阶函数。对于高阶组件,它描述的便是接受React组件作为输入,输出一个新的React组件的组件。

更通俗地描述为,高阶组件通过包裹(wrapped)被传入的React组件,经过一系列处理,最终返回一个相对增强(enhanced)的React组件,供其他组件调用。如下:

  1. export default function (title) {
  2. return function (WrappedComponent) {
  3. return class HOC extends Component {
  4. render() {
  5. return <div>
  6. <div className="demo-header">
  7. {title
  8. ? title
  9. : '我是标题'}
  10. </div>
  11. <WrappedComponent {...this.props}/>
  12. </div>
  13. }
  14. }
  15. }
  16. }

使用ES6写法可以更加简洁。

  1. export default(title) => (WrappedComponent) => class HOC extends Component {
  2. render() {
  3. return <div>
  4. <div className="demo-header">
  5. {title
  6. ? title
  7. : '我是标题'}
  8. </div>
  9. <WrappedComponent {...this.props}/>
  10. </div>
  11. }
  12. }

12.react  router传参:

  1. import { Router,Route,hashHistory} from 'react-router';
  2.  
  3. class App extends React.Component {
  4. render() {
  5. return (
  6. <Router history={hashHistory}>
  7. <Route path='/user/:name' component={UserPage}></Route>
  8. </Router>
  9. )
  10. }
  11. }

一、props.params

  1. 定义路由:<Route path='/user/:data' component={UserPage}></Route>
  2.  
  3. 使用:
  4. var data = {id:3,name:sam,age:36};
  5. data = JSON.stringify(data);
  6. var path = `/user/${data}`;
  7.  
  8. 1.<Link to={path}>用户</Link>
  9. 2.hashHistory.push(path);
  10.  
  11. 获取数据:
  12. var data = JSON.parse(this.props.params.data);
  13. var {id,name,age} = data;

二、query

  1. 定义路由:<Route path='/user' component={UserPage}></Route>
  2.  
  3. 使用:
  4. var data = {id:3,name:sam,age:36};
  5. var path = {
  6. pathname:'/user',
  7. query:data,
  8. }
  9.  
  10. 1.<Link to={path}>用户</Link>
  11. 2.hashHistory.push(path);
  12.  
  13. 获取数据:
  14. var data = this.props.location.query;
  15. var {id,name,age} = data;

三、state

  1. 定义路由:<Route path='/user' component={UserPage}></Route>
  2.  
  3. 使用:
  4. var data = {id:3,name:sam,age:36};
  5. var path = {
  6. pathname:'/user',
  7. state:data,
  8. }
  9.  
  10. 1.<Link to={path}>用户</Link>
  11. 2.hashHistory.push(path);
  12.  
  13. 获取数据:
  14. var data = this.props.location.state;
  15. var {id,name,age} = data;

Web端常见问题总结的更多相关文章

  1. 手机移动端web前端常见问题整理

    移动端常见问题及解决方案 一.meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="w ...

  2. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  3. 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)

    摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...

  4. 移动web端的react.js组件化方案

     背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...

  5. web端限时活动逻辑处理总结

    由于要在web端做一个限时活动的功能,功能大致为:一个小时内可以报名参加活动,然后给予报名者奖品,先到先得.用到一些处理逻辑做下总结,以前没有做过类似的东西,都是自己先体验其他网站的报名方式,然后再摸 ...

  6. 小程序 web 端实时运行工具

    微信小程序 web 端实时运行工具 https://chemzqm.github.io/wept/

  7. 力软信息化系统快速开发框架 web端+winform端

    力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...

  8. 基于SignalR的web端即时通讯 - ChatJS

    先看下效果. ChatJS 是基于SignalR实现的Web端IM,界面风格模仿的是“脸书”,可以很方便的集成到已有的产品中. 项目官网:http://chatjs.net/ github地址:htt ...

  9. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

随机推荐

  1. C#使用Selenium+PhantomJS抓取数据

    本文主要介绍了C#使用Selenium+PhantomJS抓取数据的方法步骤,具有很好的参考价值,下面跟着小编一起来看下吧 手头项目需要抓取一个用js渲染出来的网站中的数据.使用常用的httpclie ...

  2. jQuery中哪几种选择器

    基本选择器:直接根据id,css类名,元素名返回dom元素: 层次选择器:也叫路径选择器: $("div span") 选取<div>里的所有<span>元 ...

  3. docker搭建及使用:centos7.0+docker+flask+nginx

    flask笔记: centos7安装Docker: yum install docker 启动docker服务: service docker start 构建基本镜像: sudo docker pu ...

  4. day 21 - 2 练习

    三级菜单 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, 'google': {}, '网易': {} }, '中关村': { '爱奇艺': {}, '汽车 ...

  5. 软件测试面试-必掌握的 Linux常用命令大全--2.0更新版!

  6. United States Department of Agriculture 美国农业部网站数据自动下载小脚本

    帮对象写的自动点击页面的小脚本,如果有需要的可以试试,(#^.^#) https://apps.fas.usda.gov/gats/ExpressQuery1.aspx var year = '199 ...

  7. 使用ansible实现轻量级的批量主机管理

    作者:邓聪聪 查看ansible配置文件下的hosts的文件 [root@ansible-server scripts]# cat /etc/ansible/hosts [test] 172.16.1 ...

  8. 题解-Codeforces671D Roads in Yusland

    Problem Codeforces-671D 题意概要:给定一棵 \(n\) 点有根树与 \(m\) 条链,链有费用,保证链端点之间为祖先关系,问至少花费多少费用才能覆盖整棵树(\(n-1\) 条边 ...

  9. LeetCode.atoi

    请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之 ...

  10. Nginx的启动、停止和重启

    启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@sijizhen sbin]# /usr/local/nginx/sbin/nginx -c /usr/l ...