You cannot improve your past, but you can improve your future.
once time is wasted, life is wasted.

Li Jiahao

F2E

a hunter & programmer

Passionate about life.
enjoy DOTA & PS4.

Javascript
  • ECMAScript、文档对象模型(DOM)、游览器对象模型(BOM)
  • bind、call、apply
2019-04-01

初识(一)- react@16.3

简介

前言

<=React@16.3React-dom 相关知识。

You cannot improve your past, but you can improve your future.
so.
once time is wasted, life is wasted.
  • React - 实现React功能的核心库。
  • React-dom - 将虚拟DOM渲染到浏览器当中。
  • React-reduxredux - 解决状态管理问题的 react 版本。
  • React-router-dom@4.0React-router@4.0 - react 路由相关(4.0以组件的形式存在于各页面中)。

react 组件化的开发模式,所以非常适合高级做架构,中级封组件,初级写业务的模式。

......
2018-12-17

初试dva

前奏

安装dva-cli

npm install -g dva-cli

初始化项目

mkdir dva-pro

cd dva-pro

dva-init

项目目录:

|- mock
|- node_modules
|- package.json
|- public
|- src
    |- asserts
    |- components
    |- models
    |- routes
    |- services
    |- utils
    |- router.js
    |- index.js
    |- index.css
|- .editorconfig
|- .eslintrc
|- .gitignore
|- .roadhogrc.mock.js
|- .webpackrc
  • mock 存放用于 mock 数据的文件;
  • public 一般用于存放静态文件,打包时会被直接复制到输出目录(./dist);
  • asserts 用于存放静态资源,打包时会经过 webpack 处理;
  • components 用于存放 React 组件,一般是该项目公用的无状态组件;
  • models 用于存放模型文件
  • routes 用于存放需要 connect model 的路由组件;
  • services 用于存放服务文件,一般是网络请求等;
  • utils 工具类库
  • router.js 路由文件
  • index.js 项目的入口文件
  • index.css 一般是共用的样式
  • .editorconfig 编辑器配置文件
  • .eslintrc ESLint配置文件
  • .gitignore Git忽略文件
  • .roadhogrc.mock.js Mock配置文件
  • .webpackrc 自定义的webpack配置文件,JSON格式,如果需要 JS 格式,可修改为 .webpackrc.js
......
2018-10-16

F2E知识点整理

ECMAscript:

ES5:

  1. MVC、MVVM
  2. ECMAScript、文档对象模型(DOM)、游览器对象模型(BOM)
  3. 变量、(变量声明、变量赋值)=> 变量的初始化
  4. 基本数据类型(数字、字符串、Boolean、undefined、null)、引用数据类型(对象)、ES6新增(symbol)
  5. bind、call、apply
  6. event loop,任务栈,宏任务,微任务(js线程)
  7. 事件捕获,事件目标,事件冒泡,事件代理~事件委托(叫法不同或者说主体不同)
  8. 类,类的继承,super
  9. 原型,继承
  10. session,cookie,sessionStorage,localStroage
  11. 红黑树算法,二叉树算法
  12. bind,call,apply
  13. 闭包,清内存,赋值为null
  14. 网络强缓存,弱缓存(协商缓存)
  15. js语句、js表达式
  16. 函数声明 、函数表达式(声明提升)
  17. 高阶函数、纯函数、函数柯里化
  18. 面向对象编程、面向函数编程
  19. set
  20. 修饰器 - 编译时执行的函数
  21. AMD/CMD、commonjs
  22. 匿名函数
  23. 隐式换算
  24. 4种函数调用模式(this)有四种模式,函数调用,方法调用,.call() 和 .apply()。
  25. JavaScript 中的迭代器(iterators)和迭代(iterables)是什么? 你知道什么是内置迭代器吗?
  26. JSON.parse(JSON.stringify(Obejct))的注意点
  27. 单向数据流和双向数据绑定
  28. httpXMLrequest、fetch、axios、ajax
  29. 使用单页应用将文件上传到服务器的有哪些方法(XMLHttpRequest2(streaming),fetch(non-streaming),File API)

ES6

  1. let、const
  2. () => {}
  3. class、class extend
  4. 对象初始化
  5. 简写方法名 const object = {functionName () {}}
  6. 装饰器写法(修饰器decorator => ES6)(@connet)
  7. 赋值解构
  8. rest
  9. import、export

Object:

  1. Object.keys(obj)
  2. Object.assign()
  3. Object.defineProperty(obj, key, props)

Array:

  1. Array.from()
  2. Array.prototype.includes()
  3. Array.prototype.map()
  4. Array.prototype.filter()
  5. Array.prototype.every()、Array.prototype.some()
  6. Array.prototype.reduce()

DOM:

DOM:

  1. nodeType(1,2,3)
  2. nodeName
  3. nodeValue
  4. firstChild
  5. attributes => removeAttribute & addAttribute
  6. createDocumentFragment
  7. appendChild

STYLE:

CSS:

  1. 两列自适应
  2. 边距塌陷
  3. BFC
  4. 伪元素,伪类
  5. css - mask镂空
  6. clip-path裁剪
  7. 自定义css属性
  8. :empty
  9. position: [relative, absolute, fixed, static, inherit, sticky]
  10. 重绘和重排
  11. CSS Flex / CSS Grid(网格)布局

Less:

  1. 变量 - @
  2. 混合 - ()
  3. 函数
  4. @import

Sass:

  1. 变量 - $
  2. 插值 - #{}
  3. @import 和 _
  4. font的合并处理
  5. @extend
  6. 占位选择器 - %
  7. !optional标记
  8. @at-root
  9. @debug、@warn、@error
  10. 函数 - if()
  11. 指令 - @if、 @else if、@else
  12. 指令 - @for $var from through 、@for $var from to
  13. 指令 - @each $var in
  14. 指令 - @while
  15. @mixin ($var1, $var2) @include @content
  16. @function

Vue:

Vue:

  1. props,$emit,ref,$parent,$children
  2. slot,slot-scope
  3. 无渲染组件 - 组件负责行为,调用方负责表现
  4. extend
  5. 内置组件 component
  6. provide / inject - 跨组件访问
  7. 为什么vue data 是一个函数
  8. 指令: v-cloak v-pre v-once
  9. 自定义指令 - directive(bind、inserted、update、componentUpdated、unbind)
  10. v-for循环分组实现(template)

Vue-router:

  1. scrollBehavior

React:

React:

  1. jsx
  2. ReactDOM.render()
  3. 组件、元素、实例
  4. state、props
  5. 时间处理(bind(this)) => bind、apply、call
  6. 高阶组件(HOC)
  7. 纯组件(SFC、函数式无状态组件
  8. 纯函数
  9. 受控组件、非受控组件
  10. 生命周期:constructor => componentWillMount => render => componentDidMount
  11. propTypes
  12. ref
  13. 异步处理redux:redux-chunk、redux-saga
  14. context
  15. getDerivedStateFromProps,getSnapshotBeforeUpdate @version 16.4
  16. 增加Pointer Events @version 16.6
  17. React.memo(【函数组件】) ~ React.PureComponent 【memoization => 缓存】
  18. React.lazy(() => import【组件】)
  19. static contextType
  20. static getDerivedStateFromError()
  21. Suspense组件【悬念组件?】
  22. 废弃 React.StrictMode

dva

  1. redux-saga

其他:

网络协议:

  1. HTTP1.1和HTTP1.0
  2. 强缓存、弱缓存(协商缓存)
......
2018-06-07

ES6 - set

SET

基本用法

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

......
2018-06-06

vue编写插件

项目地址:点击

......
2017-12-20

javascript - XMLHttpRequest

XMLHttpRequest

一个请求一般由四部分组成:

  1. 请求的方法或者动作。
  2. 请求的RUL。
  3. 一个可选的请求头集合,可能包含身份验证信息......
2017-12-20

javascript - css

脚本化内联样式

element.style.fontSize = "16px"

/* 设置e的样式属性为字符串s */
e.setAttribute('style', s);
e.style.cssText = s;

/* 查询e的内联样式 */
e.getAttribute('style');
e.style.cssText
......
2017-12-14

javascript - dom

创建节点

document.createTextNode('text node content');

插入节点

appendChild()

insertBefore()

删除和替换节点

removeChild()

replaceChild()

文档坐标和视口坐标

window.pageXOffset
window.pageYOffset

window.scrollX
window.scrollY

document.documentElement.clientHeight
document.documentElement.clientWidth

document.documentElement.offsetHeight

document.documentElement.scrollLeft

// 查询元素的几何尺寸
// getBoundingClientRect 返回的坐标包含元素的边框和内边距
document.documentElement.getBoundingClientRect()
......
2017-12-11

getter 和 setter

简介

javascript 中的 settergetter 是平时接触比较少的方法,其本身也并不是标准方法,只在非ie浏览器里支持(ie内核也许有其他方法可以做到呢?暂 时不知其解),但是加以利用可以做许多事情......

2017-12-08

闭包

简述

函数的执行依赖变量作用域,这个作用域是在函数定义时决定的,而不是函数执行时决定的。为了实现这种词法作用域,JavaScript 函数对象的内部 状态不仅包含函数的代码逻辑,还必须引用当前的作用域链。函数对象可以通过作用域链互相关联起来,函数体内部的变量都可以保存在函数的作用域内, 这就是 “闭包”......

2017-12-05

javascript (三)

函数

函数的调用

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过他们的 call()apply() 方法间接调用 ......
2017-11-30

ES5 - 数组

前言

本篇主要整理数组的基本用法、数组的常用方法以及 Array 原型上的一些方法,以及数组如何去重。并且会不定期进行补充~ ......

2017-11-06

css混合模式

example

主要涉及到 mix-blend-modebackground-blend-mode

先看一个视觉效果【demo】。 ......

2017-09-29

ES6 - function

函数参数的默认值

可以直接写在参数定义的后面:

function log(x, y = 'world') {
    console.log(x, y);
}

log(1);

注意点:

  • 如果函数参数是默认声明的,不能用 letconst 再次声明。

  • 使用参数默认值时,函数不能有同名参数

  • 另外,一个容易忽略的地方是,参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。如下 ......

2017-09-13

npm

创建

通过 npm init 创建 package.json 文件。

配置

package.json的文件配置有:

  • name - 必选项,模块名称。命名时不能包含js、node、和url中需要转义的字符,不能以.和_为开头。
  • version - 必选项,模块的版本号。
  • main - 必选项,模块入口文件相对路径(相对于模块根目录)。
  • description - 可选项,模块功能描述,显示在 npm search "package-name" 中。
  • keywords - 可选项,数组类型,模块的关键字,显示在 npm search "package-name" 中。
  • author - 可选项,发起者信息。示例如下: ......
2017-09-11

const

特性

  • const 声明一个只读的常量,一旦声明,常量的值就不能改变。
  • const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。
  • const 命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。 ......
2017-09-11

ES6 - class

es5的构造方法。

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};

var p = new Point(1, 2);

es6的写法。

//定义类
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}

注意,定义“类”的方法的时候,前面不需要加上 function 这个关键字,直接把函数定义放进去了就可以了。 另外,方法之间不需要逗号分隔,加了会报错。

es6的类,完全可以看作构造函数的另一种写法。 ......

2017-09-08

Javascript(一)

Javascript

基础

javascript术语基本涵盖了以下三个部分:

  • ECMAScript - 语言的核心部分(即变量,函数,和循环等等)。
  • DOM(文档对象模型)- DOM标准(与HTML,XML文档交互的方式)。
  • BOM(游览器对象模型)- 与游览器有关的对象集合。

面向对象程序设计的OOP常用到的概念:

  • 对象(有时候也可以称作为”实例”)、方法、属性;
  • 类 - 原型系统prototype,没有类的概念可以理解为模板;
  • 封装 - 我们只需要知道所操作对象的接口,而不必去关心它的具体实现;
  • 聚合 - 多个对象合并成一个新对象的过程;
  • 重用和继承 - 实现代码的重用;
  • 多态 - 不同的对象通过相同的方法调用来实现各自行为; ......
2017-08-29

commonjs规范

概述

Node 应用由模块组成,采用 CommonJS 模块规范。

根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

其他

资料:

2017-08-28

初识react(三)— router

what is react-router ?

react-router 前端路由功能。

最大的特点是 react-router 不需要配置专门的路由配置文件,只需要像普通的组件一样,引入几个组件,就能够添加 react 的路由功能。

使用

react-router 的使用非常简单,它目前已经发行到了 v4 版本,而之前的3个版本在网络上也能找到非常多的应用。在这里我们仅拿最新的版本 作为示例。在 react-router@4 版本当中,专门为Web端提供了高度封装好的 react-router-dom 库,这下我们几乎不需要任何的配置就可 以直接使用前端路由功能了。 ......

2017-08-28

dns-prefetch

what is dns-prefetch ?

DNS 请求需要的带宽非常小,但是延迟却有点高,这点在手机网络上特别明显。

dns-prefetch, 是 DNS 预获取,也是网页前端的优化的一种技术。其范围包括文档的所有链接,无论是 图片的,CSS 的,还是 JavaScript 等其他用户能够点击的 URL

一般在前端优化中与 DNS 有关的两点:

  1. 减少请求次数
  2. 提前对 DNS 预获取。

DNS 作为互联网的基础协议,其解析速度很容易被网站优化人员、SEO人员忽视,其典型的一次 dns-prefetch解析需要“20-120ms”, 减少 DNS 解析时间和次数是一个不错的优化方式。

dns-prefetch ​的作用简单说明就是当你浏览网页时,浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页链接 无需 DNS 解析,减少浏览者等待时间,提高用户体验。 ......

2017-08-25

初识react(二)- redux

what is redux ?

react 处理数据的方式主要有 propsstate 两种。

其中的 props 必须是从父组件传递到子组件,如果嵌套层级很多,props 必须逐级从保存数据的组件层层 传递到使用 props 的组件当中。而 state 在使用的时候,必须通过调用 this.setState() 方法, 在改变 state 值的同时,触发 React 组件运行的生命周期,来触发界面的更新。 this.setState() 方 法可以传递数据、方法、回调函数。在同一次操作中,连续调用多次 this.setState() 方法也会造成许多难以预料的结果, 仅仅通过看代码你很难判断出最后值会变成什么。

redux 的理念:把一个应用的所有状态数据存储在一个统一的地方集中管理。 ......

2017-08-23

react 脚手架

主要的特性:

  • 无需配置;
  • 集成了对 React, JSX, ES6Flow 的支持;
  • 集成了开发服务器;
  • 配置好了浏览器热加载的功能;
  • JavaScript 中可以直接 import CSS 和图片;
  • 自动处理 CSS 的兼容问题,无需添加 -webkit 前缀;
  • 集成好了编译命令,编译后直接发布成产品,并且还包含了 sourcemaps

值得注意:

  • Node 的版本必须 >= 4,推荐 Node >= 6 and npm >= 3;
  • 运行起来后浏览器已经实现了热加载刷新,修改代码保存后浏览器会自动刷新;
  • 执行 npm testyarn test 可以执行测试动作。;
  • 编译项目执行 npm run buildyarn build; ......
2017-08-18

javascript - !~

javascript - 按位取反

过滤market标签的数据

        /**
         * 过滤掉营销组件
         *
         * @param {Array} modList
         * @returns
         */

        function filterMods(modList) {
            return modList.filter(function(item) {
                return item.tag && (!~item.tag.indexOf('market'));
            });
        }
......
2017-06-26

wechat

微信小程序

......
2017-05-24

初识angular

ng-app

ng-model

    ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error)
    ng-model 指令根据表单域的状态添加/移除以下类:
    ng-empty
    ng-not-empty
    ng-touched
    ng-untouched
    ng-valid
    ng-invalid
    ng-dirty
    ng-pending
    ng-pristine

ng-bind

ng-controller

......
2017-05-17

css

品牌墙效果


......

2017-05-14

初识 vue 2.0

Getting Started

MVVMMVCMVP模型

vue相关:

  • vue
  • vue-router
  • vuex
  • axios

举个栗子:

<div id="app" v-bind:title="message">
 { {message} }
</div>

new Vue({
    el: '#app'
    data: {
        message: 'hello world!'
    }
})

重要的属性:

  • data - 数据
  • methods - 方法
  • watch - 监听
  • computed - 计算属性
  • component - 注册组件

除了 data 属性, Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 data 属性区分。例如: ......

2017-05-02

Object

整理一下碰到的 Object 的一些方法。 Object.keysObject.definePropertyObject.assign

Object.keys( )

返回一个数组,包含指定对象的所有自有可遍历属性的名称。 MDN详解

var vendors = {
  '': '',
  Webkit: 'webkit',
  Moz: '',
  O: 'o',
  ms: 'ms'
};

Object.keys(vendors)            // ["", "Webkit", "Moz", "O", "ms"]
......
2017-02-21

tool - gulp

gulp

入门指南

本文主要了解gulp,存在偏差忘指正。

安装gulp什么的就不去多说了,可以上gulp跟着节奏一步步走下来,基本上也就安装完成了。

主要告诉大家的是gulp中几个比较重要的api和一些我用到的api.当然后期也会进行适当的补充。

  • 1 - gulp.task(name[, deps], fn)

name: 任务的名字

deps:一个包含任务列表的数组,这些任务会在你当前任务运行之前完成。

fn: 该函数定义任务所要执行的一些操作。通常来说,它会是这种形式:gulp.src().pipe(someplugin())。

任务列表是可以省略的. ......

2017-01-24

问题整理

#1 - 微信中不能直接打开itunes的下载地址的问题 ?

知乎文章:https://www.zhihu.com/question/24029212

解决方案:

  • 方案一,申请应用宝,先跳转到应用宝页面,再点击下载根据设备的不同转去 AppStore 或是 Android 的应用宝下载地址。
  • 方案二,在页面前端做处理,如果无法跳转到 AppStore 就提示用户在微信里手动选择用 Safari 打开页面。
  • 方案三,二百二维码里面配置:http://hotapp.cn/?src=http://www.hao2b.cn

#2 - 如何防止网页被恶意嵌套入其他的网页中 ?

// 判断当前的window对象是否是top对象
if (window!=top){

    // 如果不是,将top对象的网址自动导向被嵌入网页的网址
    top.location.href =window.location.href;
}

// 升级版
try{
    top.location.hostname;
        if (top.location.hostname != window.location.hostname) {
                top.location.href =window.location.href;
        }
    }
catch(e){
    top.location.href = window.location.href;
}

#3 - 在iPhone中在li标签下的click事件无效

// 解决方案:

// 方案一,在对应的css中添加cursor:pointer样式
// 方案二,将li标签改成a标签
......
2016-11-11

node单个文件压缩-js&css

node

1 - node 压缩 js

// 安装
npm install uglify-js -g 或者 sudo npm install uglify-js -g

// 压缩
uglifyjs *.js -o *.min.js

uglifyjs *.js -m -o *.min.js

ps -m 将参数压缩成a.b.c

2 - node 压缩 css

// 安装
npm install clean-css-cli -g 或者 sudo npm install clean-css-cli -g

// 压缩
cleancss -o *.min.css *.css
......
2016-10-31

javascript - 对象


JavaScript 中所有变量都可以当做对象使用,除了两个例外 nullundefined

注意:一个常见的误解是数字的字面值(literal)不能当作对象使用。这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分。

2.toString();   // 出错:SyntaxError

// 变通方法
2..toString();
2 .toString();
(2).toString();

访问属性

有两种方式来访问对象的属性:点操作符或者中括号操作符。 ......

2016-10-26

github & jekyll 编写自己的小网站

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/  // 将gem资源指向 指向国内

sudo gem install jekyll  // 安装jekyll

jekyll -v // 查看jekyll 版本

jekyll server // 启服务

jekyll build // 构建

jekyll 语法 :

  • layout: 指定模板
  • title: 标题
  • description: 描述
  • category/categories: 分类
  • published: 是否发布
  • weather: 自定义变量
---
layout: post
title: title
category: blog
published: true # default true (可以不写这一行)
weather: sunny # 天气
---

调用的时候使用


......
2016-09-12

node

node的优势:

  • 非阻塞
  • 单线程
  • 事件驱动

http - 模块

hello world

a. 全局方法require()是用来导入模块的,一般直接把 require() 方法的返回值赋值给一个变量,在 JavaScript 代码中直接使用此变量即可 。require(“http”) 就是加载系统预置的 http 模块

b. http.createServer 是模块的方法,目的就是创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。

c. 通过 http.listen() 方法就可以让该 HTTP 服务器在特定端口监听。 ......

2016-08-30

非常实用的console

五种提示

console.log('this is log’);

console.info('this is info’);

console.debug('this is debug’);

console.warn('this is warn’);

console.error(‘this is error’);
......
2016-08-26

javascript - this


thisJavaScript 的一个关键字。代表在函数运行时,自动生成的一个内部对象,这个内部对象被称为函数上下文,只在函数内部调用。

在看本文章时。先把下面的话记住。不然你会懵逼!血崩!

this 对象是在运行时基于函数的执行环境绑定的:

  1. 在全局函数中,this等于window。
  2. 当函数作为某个对象的方法调用时,this指向那个对象。
  3. 匿名函数的执行环境具有全局性,因此this通常指向window。
......
2016-08-22

git

git

git相关文档:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

查看不同

$ git diff
......
2016-08-19

ES6 - let

传送门: ES6文档

Getting Started

es5变量声明:

  • var

  • function

es6新增的变量声明:

  • let

  • const

  • import

  • class ......

2016-08-11

tool - Webpack

基本

webpack 是以 commonJS 的形式来书写的,但对 AMD/CMD 的支持也很全面。

什么是 commonJS 规范?《点击查看》

webpack 的配置文件 webpack.config.js 主要分为三大块:

  • entry - 入口文件 让 webpack 用哪个文件作为项目的入口
  • output - 出口 让 webpack 把处理完成的文件放在哪里
  • module - 模块 要用什么不同的模块来处理各种类型的文件
......
2016-06-29

tool - grunt

插件介绍

  • grunt插件:grunt插件有2部分:

第一类是grunt团队贡献的插件,这些插件的名字前面都带有“contrib-”前缀,而且在插件列表中有星号标注。

第二类是第三方提供的插件,不带有这两个特征。

Contrib-jshint javascript语法错误检查;
Contrib-watch 实时监控文件变化、调用相应的任务重新执行;
Contrib-clean 清空文件、文件夹;
Contrib-uglify 压缩javascript代码;
Contrib-copy 复制文件、文件夹;
Contrib-concat 合并多个文件的代码到一个文件中;
karma 前端自动化测试工具;
cssmin 压缩css代码;
filerev 给文件增加md5的后缀名(重命名文件)类似于增加时间戳;
usemin 替换html的引用 如果有filerev后的文件则优先使用;
  • grunt常用的插件: ......