前端笔记 --持续更新

Posted llfididi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端笔记 --持续更新相关的知识,希望对你有一定的参考价值。

ms笔记

星图

js

javascript的数字类型

console.log(typeof 666) 返回一个字符串,表示未经计算的操作数的类型)

•   undefined number string boolean null object
•   && es6中的Symbol 这种对象永不相等,解决属性名冲突的问题
•   引用类型object包含:Data function Array 正则等

原型和原型链

原型:在当前类可以调用的方法
原型链:__proto__链状结构,当前没有就找上一级

哪里用到了:Vue.prototype.$axios = this.$axios()
或求平均值:(在原型上直接调用)
let ddd = [1,3,4]
ddd.average()
Array.prototype.average = function(){
let sum = 0;
for(let i =0;i<this.length;i++){
sum+=this[i]
}
return sum/this.length
}

系统方法

Object类型-实例方法
toString()

功能:返回当前对象的字符串形式,返回值为String类型

let newarr = [1,\'2\',true];
console.log(newarr.toString()); //"1,2,true"

toLocaleString()

功能:返回当前对象的“本地化”字符串形式,以便于当前环境的用户辨识和使用,返回值为String类型

(1234567).toLocaleString(); //"1,234,567"
(6.37588).toLocaleString(); //"6.376"
(new Date()).toLocaleString(); //"2017/9/24 下午2:58:21"

valueOf()

功能:返回指定对象的原始值。

2.静态方法

parseFloat:1.字符串中只返回第一个数字。2.开头和结尾的空格是允许的。3.如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
console.log(parseFloat("10")); //10
console.log(parseFloat("10.33")); //10.33
console.log(parseFloat("34 45 66")); //34
console.log(parseFloat(" 60 ")); //60
console.log(parseFloat("40 years")); //40
console.log(parseFloat("He was 40")); //NaN

eval(string):函数可计算某个字符串,并执行其中的的 JavaScript 代码。//没什么用处

RegExp对象方法
test
  • 功能:用于检测一个字符串是否匹配某个模式。
  • 参数:string,必须,要检索的字符串。
  • 返回值:true或者false。
注意:支持正则表达式的 String 对象的方法有:search()、match()、replace()和split()。
Function类型

argumengts

1、arguments

  • arguments.length:获取函数实参的个数
  • arguments.callee:获取函数对象本身的引用
  • arguments.callee.length:获取函数形参的个数
Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用每个实际传入的参数。

示例:

function say(a,b,c){
console.log(arguments.length); //2
console.log(arguments[0],arguments[1]); //hello world
}
say(\'hello\',\'world\');

String类型

length

功能:string对象的length属性声明了该字符串的字符数

String对象方法

charAt()
  • 功能:返回指定位置的字符
  • 参数:必须,为目标字符的下标位置
若参数index不在0与string.length之间,该方法返回一个空字符串
charcodeAt()
  • 功能:返回在指定的位置的字符的Unicode编码
  • 参数:必须,为目标字符的下标位置
若参数index不在0与string.length之间,该方法返回NaN
indexOf()
  • 功能:检索字符串,返回指定子字符串首次出现的位置
  • 参数1:检索目标子字符串,必须
  • 参数2:在字符串中开始检索的位置,可选。其合法值是0到stringObject.length-1。如果省略该参数,将从字符串的首字符开始检索
如果要检索的字符串值没有出现,则该方法返回-1

indexOf() 方法对大小写敏感

lastIndexOf() =>从后向前搜索字符串

match() ?待理解
  • 功能:返回指定位置的字符
replace()
  • 功能:在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
  • 参数1:regexp/substr,必须,规定子字符串或要匹配的RegExp对象。
  • 参数2:replacement,必须,用于替换的子字符串值。
  • 返回值:替换后的一个新字符串

示例:

var s = \'hello world hello\';
console.log(s.replace(\'hello\',\'hi\')); //hi world hello
console.log(s.replace(/hello/,\'hi\')); //hi world hello
console.log(s.replace(/hello/g,\'hi\')); //hi world hi

replace方法返回一个字符串,并不会修改字符串。
split()
  • 功能:用于把一个字符串分割成字符串数组,是Array.join() 的逆操作。
  • 参数1:separator,必须,字符串或正则表达式,从该参数指定地点地方分隔原字符串。
  • 参数2:howmany,可选,指定返回数组的最大长度。

示例:

var s = \'hi baby\';
console.log(s.split(\'\')); //[ \'h\', \'i\', \' \', \'b\', \'a\', \'b\', \'y\' ]
console.log(s.split(\' \')); //[ \'hi\', \'baby\' ]
console.log(s.split(\'b\')); //[ \'hi \', \'a\', \'y\' ]

slice()
  • 功能:截取字符串的某个部分,并以新的字符串返回被提取的部分。
  • 参数1:截取的起始位置,必须。
  • 参数2:截取的结束位置,可选。
  • 返回值:截取部分,一个新的字符串。
注意:String.slice() 与 Array.slice() 相似。 slice方法的两个参数接受负值,若为负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。 若未指定第二个参数,则默认截取至字符串的末尾。 slice方法不修改原字符串。

示例:

var s = \'hi baby\';
console.log(s.slice(3)); //baby
console.log(s.slice(1,5)); //i ba
console.log(s.slice(-4)); //baby
console.log(s.slice(-4,-2)); //ba

Global对象-全局对象 (属性)

关于全局对象:全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象

Infinity

代表正的无穷大的数值。

NaN

代表非数字的值。

Undefined

代表未定义的值。

Global对象-全局对象 (方法)
encodeURIComponent()

对编码的字符串进行解码decodeURI() 和 decodeURIComponent()、escape()
var codeVal = encodeURIComponent(\'20180711#abc\');
var url = \'http://www.baidu.com?code=\' + codeVal;
url; //"http://www.baidu.com?code=20180711%23abc"

location.search //"?code=20180711%23abc"
decodeURIComponent("?code=20180711%23abc") //"?code=20180711#abc"
都是URI

parseInt(string,radix) ?
parseFloat()

功能:解析一个字符串,并返回一个浮点数。 该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止。

console.log(parseFloat(\'10\')); //10
console.log(parseFloat(\'10.00\')); //10
console.log(parseFloat(\'10.33\')); //10.33
console.log(parseFloat(\' 60 \')); //60 首尾的空格会忽略
console.log(parseFloat(\'23 34 45\')); //23 中间的空格不会忽略,会中断
console.log(parseFloat(\'23 years\')); //23
console.log(parseFloat(\'i am 23\')); //NaN

提示:开头和结尾的空格是允许的。如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。如果只想解析数字的整数部分,请使用 parseInt() 方法。
isFinite(number)

用于检查其参数是否无穷大
number(必须):待检测数字。
如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

console.log(isFinite(123)); //true
console.log(isFinite(-1.23)); //true
console.log(isFinite(5-2)); //true
console.log(isFinite(0)); //true
console.log(isFinite(0/0)); //false
console.log(isFinite(\'Hello\')); //false

isNaN(value)

如果给定值为 NaN则返回值为true;否则为false。
一个isNaN的 polyfill 可以理解为(这个polyfill利用了NaN自身永不相等于自身这一特征 ):
var isNaN = function(value) {

var n = Number(value);
return n !== n;

};

Number(object)

把对象的值转换为数字
object(必须):待转换的对象。
如果参数是 Date 对象,返回时间戳
如果对象的值无法转换为数字,那么返回 NaN。
console.log(Number(new Boolean(true))); //1
console.log(Number(new Boolean(false))); //0
console.log(Number(new Date())); //1506266494726
console.log(Number(new String(\'999\'))); //999
console.log(Number(new String(\'999 888\'))); //NaN

String(object)

把对象的值转换为字符串
String(new Boolean(true)) //true

Math对象

Math.abs(); //取绝对值
Math.ceil(); //向上取整
Math.floor(); //向下取整
Math.round(); //四舍五入取整
Math.random(); //返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。
Math.max(x,y,z,x); //返回里面最大的
Math.min(x,y,z,x); //返回里面最小的

JSON对象
JSON.parse()

将字符串反序列化成对象

JSON.stringify()

将一个对象解析为json字符串

闭包

  • 读取函数内部的变量
  • 使这些变量的值始终保存在内存中

继承

  • 类继承
  • 构造函数继承
  • 组合继承
  • 寄生组合继承
  • extends (es6)

事件流

事件代理 事件委托

跨域

jsonp : get请求

ifram:开启一个新的页面

cors:跨域资源共享(IE10以上,在请求头加origin)

proxy => nginx反向代理

es6

promise

promise库 => bluebird

class

vue

数据双向绑定

object.defineProperty

vuex

有哪几种属性:

  • state => 基本属性
  • getters => 从基本数据派生的数据,return后不会改变原数据。
  • mutations => 提交更改数据的方法,同步!
  • actions => 像一个修饰器,包裹mutations,使之可以异步。
  • modules => 模块化vuex

vuex 的 store 特性是什么:

  • vuex 就是一个仓库,仓库里放了很多对象。其中 state 就是数据源存放地,对应于一般 vue 对象里面的data
  • state 里面存放的数据是响应式的,vue 组件从 store 读取数据,若是 store 中的数据发生改变,依赖这项数据的组件也会发生更新。
  • 可以通过 mapState 把全局的 state 和 getters 映射到当前组件的 computed 计算属性(第二种方法)。

    1.从vuex中按需导入mapState函数
    import { mapState } from \'vuex\'
    computed:{

    ...mapState([\'count\'])

    }

vuex 的 getter 特性是什么:

  • getter 可以对 state 进行计算操作,他就是 store 的计算属性。
  • 虽然在组件内也可以做计算属性,但是 getters 可以在多组件之间复用。
  • 如果一个状态只在一个组件中使用,是可以不用 getters。

vuex 的 mutation 特性是什么:

  • action 类似于 muation,不同在于:action 提交的是 mutation,而不是直接变更状态。
  • action 可以包含任意异步操作。
  • 不要再组件中直接修改,要在mutation中修改。

    //在vuex中
    mutations:{

    add(state,step){//第一个参数接收state, 第二个参数是传过来的
        state.count++
    }

    }

    //组件中
    methods:{

    handle1(){
        this.$store.commit(\'add\',3)//把第二个参数传到vuex,
    }

    }

vue 中 ajax 请求代码应该放在组件的 methods 中还是 vuex 的 action 中

  • 如果请求来的数据不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state 里。
  • 如果被其他地方使用,请将请求放入 action 里,方便复用,并包装成 promise 返回。

不用 vuex 会带来什么问题

  • 可维护性会下降,你要修改数据,你得维护三个地方。
  • 可读性下降,因为一个组件里的数据,你根本就看不出来是从哪里来的
  • 增加耦合,大量的上传派发,会让耦合性大大的增加,本来vue用component就是为了减少耦合,现在这么用,和组件化的初衷相悖

comtruted watch

1.watch擅长处理的场景:一个数据影响多个数据

2.computed擅长处理的场景:一个数据受多个数据影响

https://blog.csdn.net/akatsuki233/article/details/89494859

axios挂载

算法

排序

无侵入无序数组求最大值

let arr = [12,435,354,6436,566,56546]
let res1 = Math.max.apply(null,arr) //56546
let res2 = Math.min.call(null,...arr) //56546

css

rem em

em相对于父元素

rem相对于根元素字体大小

居中

/ table-cell居中 /
display:table-cell;
vertial-align:middle;
text-align:center;

/ flex居中 /
display:flex;
justify-content:center;
align-items:center;

/ 定位居中 /

flex 盒子模型

修改checkbox样式

基本原理是利用after/ before插入新的元素。然后利用新元素的背景颜色或背景图片覆盖掉原来的样式。

<input type="checkbox" name="method" value="plus" checked>plus

<input type="checkbox" name="method" value="minus">minus

<input type="radio" name="method" value="plus">plus

<input type="radio" name="method" value="minus" checked>minus

input[type=checkbox] {
margin-right: 5px;
cursor: pointer;
font-size: 14px;
width: 15px;
height: 12px;
position: relative;
}

input[type=checkbox]:after {
position: absolute;
width: 10px;
height: 15px;
top: 0;
content: " ";
background-color: #ff0000;
color: #fff;
display: inline-block;
visibility: visible;
padding: 0px 3px;
border-radius: 3px;
}

input[type=checkbox]:checked:after {
content: "✓";
font-size: 12px;
}

input[type=radio] {

margin-right: 5px;
cursor: pointer;
font-size: 14px;
width: 15px;
height: 12px;
position: relative;

}

input[type=radio]:after {

position: absolute;
width: 10px;
height: 15px;
top: 0;
content: " ";
background-color: #ff0000;
color: #fff;
display: inline-block;
visibility: visible;
padding: 0px 3px;
border-radius: 50%;

}

input[type=radio]:checked:before {

content: "✓";
display: block;
position: relative;
top: -2px;
left: 3px;
width: 6px;
height: 6px;
color: #fff;
font-weight: 400;
z-index: 1;
}

cookie

fetch 获取资源接口 (跨域)

计算运行时间

console.time() => console.timeEnd()

console

console.dir() =>显示一个对象的所有属性和方法

console.dir(Function)

伪数组

伪数组:具备length属性,不能使用真数组的方法

什么是伪数组:querySelectAll,getElementByClassName,arugments

let args = arguments
console.log(args) //返回一个伪数组,__proto__显示是一个对象
args = Array.prototype.slice.call(args,0) //在数组的原型上,slice后面为0返回原来的数组
args.push(8) //伪数组没有push方法 通过上面转化变成了真数组

bug解析

overflow属性

scroll:必会出出现滚动条;(斯口柔)

auto:子元素内容大于父元素时出现滚动条

visible:溢出的内容出现在父元素之外(v ze bao)

hidden:溢出隐藏

targer

html中通过标签打开一个链接,可以通过a的target属性规定在何处打开链接文档。

_blank

在新窗口中打开被链接文档。

_self

默认。在相同的框架中打开被链接文档。

_parent

在父框架集中打开被链接文档。

_top

在整个窗口中打开被链接文档。

framename

在指定的框架中打开被链接文档。

元素的alt和title

alt和title同时设置时,alt => 图片的替代文字 ,title => 图片的解释文字。

关于闭包的题

function Foo() {

var i = 0;
return function() {
    console.log(i++);
}

}

var f1 = Foo(),

f2 = Foo();

f1();//0
f1();//1
f2();//0

通过验证numb++:
let numb = 1;
console.log(numb++)//1
console.log(numb)//2

1.第一次f1,numb++是先输出了以后加的
2.var f1 = Foo() return 出的变量使函数形成了闭包,i在内存里,第二次访问f1函数时使用的是闭包return出来的值
3.f2和f1指向了不同的函数Foo,暂时先想象成类

有效的JavaScript变量定义规则

  • 变量命名必须以字母、下划线”_”或者”$”为开头。 ...
  • 变量名中不允许使用空格和其他标点符号,首个字不能为数字。
  • 变量名长度不能超过255个字符。
  • 变量名区分大小写。( ...
  • 变量名必须放在同一行中
  • 不能使用脚本语言中保留的关键字、保留字、true、false 和null 作为标识符

JavaScript系统方法

JavaScript常见事件触发

onmousedown:当用户按下鼠标按钮执行Javascript代码
<p onmousedown="myFunction("点击")" onmouseup="myFunction("松开")">点击</p>

onkeyoress:按下键盘
1.onkeydown:这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。
2.onkeypress:这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。
3.onkeyup:这个事件在用户放开任何先前按下的键盘键时发生。

onblur:离开input
HTML中
<element onblur="SomeJavaScriptCode">
JavaScript 中
object.onblur=function(){SomeJavaScriptCode};

onchange:会在域的内容改变时发生

HTML的Doctype和严格模式与混杂模式的描述

  • 声明位于文档中的最前面,处于 标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。

  • 严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
  • DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现

call和apply

共同作用:都是用来修改函数中this的指向问题

call => 第一个参数:借用方法的对象 可以传递多个参数

function.call(function2,1234,1,2,3)

apply => 第一个参数:借用方法的对象 传递数组

function.apply(function2,[1234,1,2,3])

bind => 第一个参数:借用方法的对象 可以传递多个参数 只改变this指向不执行函数 需要自己调用

function.bind (function2,1234,1,2,3)()

基本用法:

function add(a,b){

 return a+b

}
function sub(a,b){

return a-b

}
var a1 = add.apply(sub,[8,4]) //12 把sub放在add中进行
var a2 = sub.apply(add,[8,4]) //4

var name = \'张三\',

age =28;

var obj = {

name:\'李四\',
myfunction:function(){
    console.log(this.name + this.age)
}

}
var db = {

name:\'王五\',
age: 30

}
obj.myfunction() //李四 undefined
obj.myfunction.call() //张三 28 => 指向window
obj.myfunction.call(db) //王五 30 =>指向db
注意:call后面没有参数指向window

继承
function A() {

this.name = \'Kevin\'
this.showname = function(){
    console.log(this.name)
}

}
function B() {

this.name = \'kobe\'
A.call(this)  //this代表的是B

}
var B = new B()
B.showname() //Kevin

手动封装

webkit内核

Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,android手机的默认浏览器均采用的Webkit作为器浏览器内核。Webkit的采用程度由 此可见一斑,理所当然的成为了当今主流的三大浏览器内核之一。另外两个分别是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 内核,而微软的IE系列则使用的是Trident内核。

另外,搜狗浏览器是双核的,双核并不是指一个页面由2个内核同时处理,而是所有网页(通常是标准通用标记语言的应用超文本标记语言)由webkit内核处理,只有银行网站用IE内核

js的一些待解决

arguments

以上是关于前端笔记 --持续更新的主要内容,如果未能解决你的问题,请参考以下文章

超硬核 Web 前端学霸笔记,学完就去找工作!

前端笔记

前端语言串讲 | 青训营笔记

前端笔记

架构方面学习笔记-前端架构设计

前端:jQuery笔记