本文提供最简便的解答方式,方便快速记忆,复盘,详细答案可本身再搜一下。
object,string,undefined,number,function,booleanjavascript
基本数据类型:
string,number,boolean,undefined,null
parseInt(),parseFloat(),Number()
==,!!php
var array = new Array() var array = []
Array.of(1,2) //[1,2]
这是es6新增的一个Array方法,建立一个具备可变数量参数的新数组实例,而不考虑参数的数量或类型。
(感谢 haru 的宝贵建议)html
dom0级前端
var btn = document.getElementById("button"); btn.onclick = function(){ alert(1); } btn.onclick = function(){ alert(2); } //只弹出2
dom2java
var btn = document.getElementById("button"); btn.addEventListener("click",function(){ alert("1"); }) btn.addEventListener("click",function(){ alert("2"); }) //先弹出1,再弹出2
var ev = ev||window.event document.documentElement.clientWidth||document.body.clientWidth var target = ev.srcElement||ev.target
改变this的指向,
其中call的写法linux
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,因此运行结果为:alert(4); // 注意:js 中的函数实际上是对象,函数名是对 Function 对象的引用。
apply写法es6
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.apply(sub,[4,2]);
不一样就在于第二个参数,apply写成数组web
bind写法ajax
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.bind(sub,4,2)();
bind是返回了一个改变上下文的一个函数,能够稍后调用,而apply,call是当即执行函数数据库
前者会自动转换类型
后者不会
跨域是什么:实际上就是一个网站不能执行其余网站上的网址,是由浏览器同源策略形成的,是浏览器对js施加的安全限制
所谓同源,其实是指域名,协议,端口都相同
也就是说当,域名或者协议,或者端口不一样的时候,就是跨域,
jsonp
json with padding,是一种json的一种使用模式
产生的缘由,ajax不支持跨域,因为浏览器的同源策略,可是script的src支持跨域
主要的原理是动态建立一个script标签的,经过src调用服务器提供的js脚本,该脚本的内容是一个函数调用,该函数在本地js文件中进行定义,其中的参数就是,本地函数请求的数据,也就是服务器所将返回的数据
与ajax的不一样,ajax是经过xhr获取非本页面的数据内容,而jsonp获取的是服务器提供js脚本
代理
PHP端修改header(XHR2方式)
在php接口脚本中加入如下两句便可:
header('Access-Control-Allow-Origin:*');//容许全部来源访问
header('Access-Control-Allow-Method:POST,GET');//容许访问的方式
基本类型 undefind null number string boolean
引用类型 object Function Array
获取值的时候原生不是方法,不带括号
var boxs =document.getELementsByTagName("input"); var boxArray = []; var len = boxs.length; while(len--){ if(boxs[len].type == 'checkbox'){ boxArray.push(boxs[len]); } }
var dom = document.getElementById("ID"); dom.innerHTML = "xxxx" dom.style.color="#000"
javascript由ECMAScript,DOM,BOM三部分组成,
调用localStorage,cookies等本地存储进行存储相关信息
三者的共同点:都保存在浏览器。
三者的区别:
与服务器的交互
存储大小限制也不一样,
数据有效期不一样,
做用域不一样,
内存泄露指任何对象在再也不拥有或再也不须要它以后依然存在
经典闭包
function outer(){ var a = 1; function inner(){ alert(a); } return inner } var inn = outer(); inn();
点击li返回li下标
<ul id="test"> <li>1</li> <li>2</li> <li>3</li> </ul> <script> var oUL = document.getElementById("test"); var oLi = oUl.getElementByTagName("li"); for(var i=0;i<oLi.length;i++){ oLi[i].index = i; oLi[i].onclick = function(){ alert(this.index); } } </script> <!-- 闭包 --> <script> var oUL = document.getElementById("test"); var oLi = oUl.getElementByTagName("li"); for(var i=0;i<oLi.length;i++){ oLi[i].index = i; oLi[i].onclick = (function(a){ return function(){ alert a; } })(i) } </script>
普通函数调用,指向windows
window.value=1; function getValue(){ console.log(this.value); } getValue();//输出1,此时的this指向window
对象的方法调用,指向对象
var Obj={ value:2, getValue:function(){ console.log(this.value);//输出2,this指向Obj } }
构造器方法调用,指向构造函数实例出来的对象
function main(val){ this.value=val; } main.prototype.getValue=function(){ console.log(this.value); } var fun=new main(3); fun.getValue(); fun.value;//输出3,this指向main的实例对象fun
call,apply,bind能够自定义this指向第一个参数
function showValue(){ console.log(this.value); } var obj={ value:4 } showValue.call(obj)//输出4,this指向了obj对象
function showValue(){ console.log(this.value); } var obj={ value:4 } var showValue2=showValue.bind(obj); showValue2()//输出4,this指向了obj对象
"use strict"
消除js一些不合理的用法
消除代码运行的一些不安全之处
增长运行速度
为将来新版本js作铺垫
版本控制是一种记录一个或若干文件内容变化,以便未来查阅修改以及更新。
ajax请求四步
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ console.log(responseText); } }
首先根据url中的域名,在远程服务器中查询对应
ajax用于web页面中实现异步数据交互,实现页面局部内容刷新
json是一种请求轻量级的数据交互格式
GET:
POST:
PUT:
DELETE:
请求报文包含三部分:
响应报文包含三部分:
https就是加上加密处理(通常是SSL安全通讯线路)+认证+完整性保护
经常使用:
利用indexOf方法的去重
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
var arr = [1,1,2,3,4,2,6,4,5,7]; var nArr = []; function removeItem(arr){ for(var i=0;i<arr.length;i++){ if(nArr.indexOf(arr[i])==-1){ nArr.push(arr[i]); } } return nArr; } console.log(removeItem(arr));
let const
class extends super
arrow function(箭头函数)
除了书写简洁了不少,最大的优势是this指向,使用箭头函数,函数内部的this就是定义时所在的对象。箭头函数根本没有本身的this,this是继承外面的,它内部的this就是外层代码块的this
template string(模板字符串)
ajax调用数据库,须要向文档中插入大段html的时候,传统的字符串拼接太麻烦,引入模板工具库会稍微好点,不过仍是没有es6的template string简单,能够直接用反单引号包括代码块``,用${}来引用变量,全部的空格缩进都会保留到输出中
destructuring(解构赋值)
es6按照必定模式,从数组和对象中提取值,对变量进行赋值,这就成为解构,也就是说,运用es5的方法,数组和对象中的变量须要,一个个进行赋值,而es6能够一步到位
default,rest(默认值,扩展语法)
当函数忘记传参的时候,给它一个默认值,传统方法是在函数中运用||,es6能够直接在参数中写上
function animal(type){ type = type || 'cat' console.log(type) } animal()
function animal(type = 'cat'){ console.log(type) } animal()
function animals(...types){ console.log(types) } animals('cat', 'dog', 'fish') //["cat", "dog", "fish"]
gulp是一种自动化构建工具,前端工程化开发的一种工具,加强开发流程
使用方便,npm安装,新建gulpfile.js,导入gulp模块,let gulp = require('gulp')
经过default任务去定义工做流
最后在终端执行gulp来进行自动化操做
api很简单只有四种
UI元素的不一样
尺寸单位不同,
网格布局有所不一样
移动设备
社区